@liayun
2016-05-11T19:40:49.000000Z
字数 4029
阅读 2236
知问前端
折叠菜单(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());
});