@liayun
2016-05-11T11:40:49.000000Z
字数 4029
阅读 2479
知问前端
折叠菜单(accordion),和选项卡一样也是一种在同一个页面上切换不同内容的功能UI。它和选项卡的使用几乎没有什么太大区别,只是显示的效果有所差异罢了。
使用accordion比较简单,但需要按照指定的规范即可。
HTML部分:
<div id="accordion"><h3>菜单1</h3><div>内容1</div><h3>菜单2</h3><div>内容2</div><h3>菜单3</h3><div>内容3</div></div>
结合选显卡之后的HTML代码为:
<div id="main"><div class="main_left"><div id="tabs"><ul><li><a href="tab1.html">tab1</a></li><li><a href="tab2.html">tab2</a></li><li><a href="tab3.html">tab3</a></li></ul></div></div><div class="main_right"><div id="accordion"><h3>菜单1</h3><div><p>内容1</p><p>内容1</p></div><h3>菜单2</h3><div>内容2</div><h3>菜单3</h3><div>内容3</div></div></div></div>
如何使用呢?只须jQuery代码:$("#accordion").accordion()即可。
在显示的accordion折叠菜单中,在火狐浏览器中打开Firebug或者右击->查看元素。这样,我们可以看看accordion的样式,根据样式进行修改。我们为了和网站主题符合,对accordion的标题背景进行修改。如下:
//无须修改ui里的CSS,直接用style.css替代掉.ui-widget-header {background:url(img/ui_header_bg.png);}
对上面加上选显卡之后的HTML内容的css修饰,style.css 如下:
#main {margin: 0 auto;padding: 10px 0 0 0;width: 800px;}#main .main_left {width: 580px;float: left;}#main .main_right {width: 200px;float: right;}#tabs {border: none;}#ui-id-6, #ui-id-8, #ui-id-10 {border: 1px solid #ccc;border-top: none;position: relative;top: -2px;}
折叠菜单的方法有两种形式:
accordion外观选项
| 属性 | 默认值/类型 | 说明 |
|---|---|---|
| collapsible | false/布尔值 | 当设置为true时,允许菜单折叠对应的内容。默认值为false,不会折叠对应内容。 |
| disabled | false/布尔值 | 默认为false,设置为true则禁用折叠菜单。 |
| event | click/字符串 | 触发accordion的事件类型,默认为click。可以设置mouseover等其他鼠标事件。 |
| active | 数组和布尔值 | 如果是数组,初始化时默认显示哪个菜单,默认值为0。如果是布尔值,那么默认是否折叠,置为true,则会折叠,但条件必须是collapsible值为true。 |
| heightStyle | auto/字符串 | 默认为auto,即自动根据最高的那个为基准,fill则是填充一定的可用高度(一点卵用也没有),content则是根据内容伸展高度。 |
| header | h1/字符串 | 设置折叠菜单的标题标签,设置时,应该与HTML的标题标记相对应 |
| icons | 默认图标 | 设置想要的图标。 |
jQuery测试代码:
$('#tabs').tabs();$("#accordion").accordion({collapsible : true,//disabled : true,//event : "mouseover",//active : 1,active : true,//heightStyle : "auto",heightStyle : "content",//heightStyle : "fill",header : "h3",icons: {"header": "ui-icon-plus","activeHeader": "ui-icon-minus",}});
除了属性设置外,accordion()方法也提供了大量的事件。这些事件可以给各种不同的状态提供回调函数。
accordion事件选项
| 事件名 | 说明 |
|---|---|
| create | 当创建一个折叠菜单时激活此事件。该方法有两个参数(event, ui),ui参数有两个子属性header和panel,得到当前标题和内容选项的对象。 |
| activate | 当切换一个折叠菜单时,启动此事件。该方法有两个参数(event, ui),ui参数有四个子属性newHeader、newPanel、oldHeader,oldPanel,分别得到的是新header对象、新内容对象、旧header对象和旧内容对象。 |
| beforeActivate | 当切换一个折叠菜单之前,启动此事件。该方法有两个参数(event, ui),ui参数有四个子属性newHeader、newPanel、oldHeader、oldPanel,分别得到的是新header对象、新内容对象、旧header对象和旧内容对象。 |
jQuery测试代码:
$('#tabs').tabs();$("#accordion").accordion({heightStyle : "content",header : "h3",icons: {"header": "ui-icon-plus","activeHeader": "ui-icon-minus",},create : function(event, ui) {alert("create");alert($(ui.header.get()).html());alert($(ui.panel.get()).html());},activate : function(event, ui) {alert($(ui.oldHeader.get()).html());alert($(ui.oldPanel.get()).html());alert($(ui.newHeader.get()).html());alert($(ui.newPanel.get()).html());},beforeActivate : function(event, ui) {alert($(ui.oldHeader.get()).html());alert($(ui.oldPanel.get()).html());alert($(ui.newHeader.get()).html());alert($(ui.newPanel.get()).html());}});
accordion('action', param)方法
| 方法 | 返回值 | 说明 |
|---|---|---|
| accordion('disable') | jQuery对象 | 禁用折叠菜单 |
| accordion('enable') | jQuery对象 | 启用折叠菜单 |
| accordion('widget') | jQuery对象 | 获取折叠菜单的jQuery对象 |
| accordion('destroy') | jQuery对象 | 删除折叠菜单,直接阻断了accordion |
| accordion('refresh') | jQuery对象 | 更新折叠菜单,比如高度 |
| accordion('option', param) | 一般值 | 获取option属性的值 |
| accordion('option', param, value) | jQuery对象 | 设置option属性的值 |
仅测试如下方法:
$('#tabs').tabs();$("#accordion").accordion({heightStyle : "content",header : "h3",icons: {"header": "ui-icon-plus","activeHeader": "ui-icon-minus",}});$("#accordion").accordion("disable"); //禁用折叠菜单$("#accordion").accordion("enable"); //启用折叠菜单alert($("#accordion").accordion("option", "active")); //0$("#accordion").accordion("option", "active", 1);
在accordion的事件中,提供了使用on()方法处理的事件方法。
on()方法触发的选项卡事件
| 特效名称 | 说明 |
|---|---|
| accordionactivate | 折叠菜单切换时触发 |
| accordionbeforeactivate | 折叠菜单切换前触发 |
如,jQuery代码:
$("#accordion").on("accordionactivate", function(event, ui) {alert($(ui.oldHeader.get()).html());alert($(ui.oldPanel.get()).html());alert($(ui.newHeader.get()).html());alert($(ui.newPanel.get()).html());});