• 使用jQuery开发accordion手风琴插件


    一、插件效果

    手风琴插件常用的功能均已实现,包括:手风琴菜单项的折叠展开效果、选中指定菜单项、判断菜单项是否选中等。

    效果如下:

      

    二、插件内部HTML元素结构

     1 <!-- accordioon组件 -->
     2 <ul class="accordion">
     3     <li accordion-id="menu1" class="active">插件使用</li>
     4     <li>
     5         <ul>
     6             <li><a href="javascript:;">选项卡插件</a></li>
     7             <li><a href="javascript:;">手风琴插件</a></li>
     8         </ul>
     9     </li>
    10     <li accordion-id="menu2">管理员管理</li>
    11     <li>
    12         <ul>
    13             <li><a href="javascript:;">管理员查看</a></li>
    14             <li><a href="javascript:;">管理员添加</a></li>
    15             <li><a href="javascript:;">管理员修改</a></li>
    16         </ul>
    17     </li>
    18     <li accordion-id="menu3">用户管理</li>
    19     <li>
    20         <ul>
    21             <li><a href="javascript:;">用户查看</a></li>
    22             <li><a href="javascript:;">用户添加</a></li>
    23             <li><a href="javascript:;">用户修改</a></li>
    24         </ul>
    25     </li>
    26 </ul>
    27 <!-- accordioon组件 END -->

    插件主体是一个<ul>列表,里面的奇数<li>为菜单项标题,偶数<li>是菜单项内容,标题<li>被点击时会判断它是否已经选中了,如果没有选中,会把该菜单项选中,打开内容面板,同时关闭其余的菜单项。

    菜单项内容里面又是一个<ul>列表,每一个<li>都包含一个<a>标签,在我们的例子中<a>标签的单击事件是向右侧的tab里面添加一个选项卡。

    三、样式

     1 /* 手风琴样式 */
     2 .accordion {margin: 5px;font-size: 14px;}
     3 /* 链接样式 */
     4 .accordion a {color: #333333;text-decoration: none;}
     5 .accordion a:hover {color: #c81623;}
     6 /* 菜单标题样式 */
     7 .accordion .accordion-title {margin: 5px 0;padding: 5px;height: 25px;line-height: 25px;background: #dddddd;border-radius: 5px;cursor: pointer;}
     8 .accordion .accordion-title:hover {font-weight: bold;}
     9 /* 菜单面板样式 */
    10 .accordion .accordion-body {padding-left: 10px;background: white;}

    四、主要功能函数

    1、初始化插件样式和事件
     1 /**
     2  * 初始化accordion组件
     3  * @param {Object} $accordion
     4  */
     5 function init($accordion) {
     6     $accordion
     7         .children("li:even").addClass("accordion-title").end()
     8         .children("li:odd").addClass("accordion-body")
     9         .css("display", "none").eq(0)
    10         .css("display", "list-item");
    11 }
    12 
    13 /**
    14  * 绑定事件
    15  * @param {Object} $accordion
    16  */
    17 function initEvents($accordion) {
    18     $accordion.delegate(".accordion-title", "click", function() {
    19         // 为菜单title添加样式
    20         $(this).addClass("active").siblings(".accordion-title").removeClass("active");
    21         // 调用select选中指定菜单
    22         select($accordion, $(this).attr("accordion-id"));
    23     });
    24 }
    2、选中指定菜单
    1 /**
    2  * 选中指定菜单
    3  * @param {Object} $accordion
    4  * @param {Object} accordionId
    5  */
    6 function select($accordion, accordionId) {
    7     // 面板动画切换
    8     $accordion.children("li[accordion-id=" + accordionId + "]").next().slideDown('100').siblings('.accordion-body').slideUp('100');
    9 }
    3、判断指定菜单是否选中
    1 /**
    2  * 判断指定菜单是否选中
    3  * @param {Object} $accordion
    4  * @param {Object} accordionId
    5  */
    6 function isSelected($accordion, accordionId) {
    7     // 通过菜单title是否有active样式来判断
    8     return $accordion.children("li[accordion-id=" + accordionId + "]").hasClass("active");
    9 }
    4、插件扩展函数
     1 $.fn.accordion = function(options, param) {
     2     
     3     // 保存对象
     4     var accordion = $(this);
     5     
     6     if (typeof options == 'string') {
     7         switch(options){
     8             case 'select':
     9                 return select(accordion, param);
    10             case 'isSelected':
    11                 return isSelected(accordion, param);
    12         }
    13     }
    14     
    15     options = options || {};
    16 
    17     return this.each(function() {
    18         // 初始化组件
    19         init(accordion);
    20         // 绑定事件
    21         initEvents(accordion);
    22     });
    23 };

    五、源码下载

    https://github.com/xuguofeng/jq-ui

  • 相关阅读:
    正则表达式之断言
    认识CSS中标题引入icon图标
    认识CSS中字体图标
    认识CSS中精灵技术(sprite)和滑动门
    认识CSS中高级技巧之用户界面样式
    认识CSS中高级技巧之元素的显示与隐藏
    认识CSS中布局之文档流、浮动、定位以及叠放次序
    正则表达式之括号
    正则表达式之量词
    正则表达式之字符组
  • 原文地址:https://www.cnblogs.com/xugf/p/7804473.html
Copyright © 2020-2023  润新知