【连载】研究EasyUI系统— Accordion组件

Accordion组件是easyui框架中的布局组件之一,它提供了多个可展开/折叠的面板。Accordion经常用作页面的导航菜单。我们先通过制作一个导航菜单来认识一下Accordion。

accordion示例

  图中左侧便是通过accordion组件构建的导航菜单,右侧是用panel构建的内容显示页面。点击左侧不同的菜单,右侧panel将会加载对应的页面,显示不同内容。
  我们通过代码来研究一下accordion组件用法。示例代码主要包含两个页面,分别为accordionDemo.php和cby.php,前者包含导航菜单和内容显示页框架,后者是具体的内容页面。
  
accordionDemo.php

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css" />
        <link rel="stylesheet" type="text/css" href="../easyui/themes/icon.css" />
        <script type="text/javascript" src="easyui/jquery.min.js"></script>
        <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
        <title>accordionDemo</title>
        <style>
            a {
                text-decoration:none;
                font-size: 13px;
                color:black
            }
            .nav-left {
                float:left;
                width:200px;
                height:400px;
                margin-right: 20px;
            }
            .nav-item {
                padding: 10px;
                height: 328px;
                border: none;
            }
            .content {
                border-radius: 5px;
            }
            .contianer {
                width:100%;
            }
        </style>
        
        <script>
            function openPage(page) {
                $("#content_panel").panel("refresh",page);
            }
        </script>
    </head>
    <body>
        <div class="container">
            <!-- 左侧导航由accordion构建的导航菜单 -->
            <div id="nav_menu" class="easyui-accordion nav-left">
                <div title="灵长类" class="nav-item">
                    <table>
                        <tr>
                            <td>![](image/nav_monkey.png)</td>
                            <td>
                              <a href="javascript:void(0);" onclick="openPage('cby.php')">长臂猿</a>
                            </td>
                        </tr>
                        <tr>
                          <td>![](image/nav_monkey.png)</td>
                          <td><a href="#">猩猩</a></td></tr>
                        <tr>
                          <td>![](image/nav_monkey.png)</td>
                          <td><a href="#">卷尾猴</a></td>
                        </tr>
                    </table> 
                </div>
                <div title="龟类" class="nav-item">
                    <table>
                        <tr>
                          <td>![](image/nav_turtle.png)</td>
                          <td><a href="#">草龟</a></td>
                        </tr>
                        <tr>
                          <td>![](image/nav_turtle.png)</td>
                          <td><a href="#">巴西龟</a></td>
                        </tr>
                        <tr>
                          <td>![](image/nav_turtle.png)</td>
                          <td><a href="#">金钱龟</a></td>
                        </tr>
                    </table> 
                </div>
            </div>
            
            <!-- 右侧由Panel构建的内容显示页面 -->
            <div id="content_panel" class="easyui-panel content" data-options="width:500,height:400">
            </div>
        </div>
    </body>
</html>

<br />
cby.php

<html>
    <head>
        <meta charset="UTF-8">
        <title>长臂猿</title>
        <style>
            .logo {
                margin: 10px;
                width:80px;
                height:120px;
                float:left;
            }
        </style>
    </head>
    <body>
        <div class="contianer">
            ![](image/cby.jpg)
            <p style="margin:20px">
                长臂猿(学名:Hylobatidae):是灵长目一科动物的通称,有4属16种。因臂特别长而得名。
                …………
            </p>
        </div>
    </body>
</html>

accordion.php构建了id为nav_menu的accordion组件,在nav_menu内部,每个子<div>就是一个子面板,代码中共构造了“灵长类”和“龟类”两个子面板。每个子面板中又有一个<table>,用来构建带图标的菜单链接。点击代码中的菜单链接,将调用openPage方法,openPage方法使用panel组件中的refresh方法,将对应的内容页(cby.php)加载到panel中显示(关于panel组件我们将另外专门说明)。
  接下去介绍已给accordion的属性。由于accordion组件依赖于panel,因此这个组件有两个概念上的属性,其一是“容器(container)属性”,其二是“面板(panel)属性”。容器是指外围整体的框架,也就是整个accordion本身,包含了各个面板。面板则是指在容器中的各功能块,如“灵长类”或“龟类”等。
  从代码中也能看出容器和面板的逻辑关系,id为nav_menu的div元素便是容器,它包含了灵长类、龟类两个面板,每个面板都是一个div元素。还有三个超链接,这三个超链接将分别显示在三个面板中。

容器属性

属性名称 属性值类型 属性默认值 描述
width 数值 auto 容器宽度。
height 数值 auto 容器高度。
border 布尔值 true 是否显示容器边框。
fit 布尔值 false 容器是否填充它的父组件。
animate 布尔值 true 是否在折叠或者展开时显示动画效果。
multiple 布尔值 false 是否允许同时展开多个面板。<br />1.3.5及以上版本支持。
selected 数值 0 初始化时选中的面板索引,索引从0开始。<br />1.3.5及以上版本支持。

容器属性非常简单,无需过多讲述。
  accordion面板属性继承自panel组件,下述只是accordion独有的属性。
  
扩展的panel属性

属性名称 属性值类型 属性默认值 描述
selected 布尔值 false 面板是否为展开状态。
collapsible 布尔值 true 是否允许面板显示折叠按钮。

accordion组件方法

方法名称 参数 描述
options 返回所有属性。
panels 返回所有面板。
resize 重置组件大小。
getSelected 返回第一个选中的面板。
getSelections 返回所有选中的面板。1.3.5及以上版本支持。
getPanel which 返回指定的面板。参数which既可以是面板的标题(字符串),<br />也可以是面板的索引(数字)。
getPanelIndex panel 返回指定面板的索引,参数panel是面板对象。<br />1.3及以上版本支持。
select which 选中指定的面板。参数参考”getPanel”方法。
unselect which 取消选中指定的面板。参数参考”getPanel”方法。<br />1.3.5及以上版本支持。
add options 新增面板。参数options是包含了面板各数据的json。
remove which 删除指定的面板。参数参考“getPanel”方法。

有些比较简单的方法就不再多说。
  getSelected返回第一个选中的面板,而getSelections返回了所有选中的面板。

<script>
    var p1 = $('#nav_menu').accordion('getSelected');
    p1.panel('collapse');

    var p2 = $('nav_menu').accordion('getSelections');
    for(var i=0;i<p2.length;i++) {
        p2[i].panel('collapse');
    }
</script>

p1是通过“getSelected” 方法返回选中的面板,我们通过“collapse”方法将这个面板折叠;p2则是通过“getSelections”方法返回的一组选中面板,使用循环将这些面板全部折叠。

<script>
  /* 根据索引号获取对应面板*/
  var p = $('#nav_menu').accordion('getPanel', 1);
  
  /* 根据标题获取对应面板*/
  p = $('#nav_menu').accordion('getPanel', '系统设置');
  var index = $('#nav_menu').accordion('getPanelIndex', p2);
  alert(index)
</script>

上例代码展示了“getPanel”和“getPanelIndex”两种方法的用法。getPanel参数which既可以是索引号,也可以是字符串形式的标题。
  再来看一下如何增加一个面板。

<script>
    var options = {
        title:'我是新来的面板',
        content:'新来面板的内容',
        selected:false
    }
    $("#nav_menu").accordion("add", options);
</script>

新增一个面板时需要定义相关的面板参数,这些参数以JSON形式供“add”方法调用。
  options中的各属性可以参见“panel”组件的属性,需要说明一下,如果“selected”属性为true(默认为true),新增的面板将处于选中状态。
  
accordion组件事件

事件名称 参数 描述
onSelect title,index 面板选中时触发。参数title为面板的标题,index为面板索引。
onUnselect title,index 面板取消选中时触发。参数同上。1.3.5及以上版本支持。
onAdd title,index 新增面板时触发。参数同上。
onBeforeRemove title,index 删除面板前触发,如果返回false,则不删除。参数同上。
onRemove title,index 删除面板后触发。参数同上。

事件都比较容易理解,简单举一个例子,说明事件的用法:

<button onclick="delAccordion();">删除accordion</button>
<script>
    $("#nav_menu").accordion({
        onBeforeRemove:function(title, index) {
            var r = confirm("确认删除"+title+"(索引号:"+index+")吗?");
            return r;
        }
    });

    function delAccordion() {
        $("#nav_menu").accordion("remove", 1);
    }
</script>

上例代码使用了onBeforeRemove事件,它在“删除面板事件”发生前被触发。用户确认删除后,索引号为1的面板被删除。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • tabs组件是一系列面板的集合,不论在web亦或是其他客户端系统,tabs都是常用的组件。我们结合由accordi...
    我想我是人阅读 1,187评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • 第5章 菜单、按钮及导航 一、下拉菜单 小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根...
    凛0_0阅读 4,866评论 0 66
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,171评论 0 2
  • 花开在春的季节里,希望飘扬,不落一丝牵挂。 ——题记 还没来的时候,东北三省中关于吉林的印象最为模糊,不前很后,只...
    在飞FSW阅读 463评论 1 2