基于jQuery实现Accordion手风琴自定义插件_jquery

目前网上有很多各种各样的手风琴插件,但是没有一个完整实现了的侧菜单,今天写了一个可以无限子节点的手风琴侧菜单,有需要的可以参考一下,有什么好的想法可以留言。(没有经过彻底测试,不过问题应该不大)

下面老规矩,直接贴代码:

(function ($) {
  'use strict';
  var defaults = {
    url: null,
    param: {},
    data: {},
    fill: true,
    level_space: 15,
    onitemclick: null,
    style: {
      header: "accordion-header",
      header_title: "accordion-header-title",
      content: "accordion-content",
      selected: "selected",
      icon_base: "fa",
      icon_collapse: "fa-angle-up",
      icon_expand: "fa-angle-down"
    }
  }
  var methods = {
    init: function (options) {
      return this.each(function () {
        var $this = $(this);
        if (!$this.hasClass("accordion")) {
          $this.addClass("accordion");
        }
        var settings = $this.data('tw.accordion');
        if (typeof (settings) == 'undefined') {
          settings = $.extend({}, defaults, options);
          $this.data('tw.accordion', settings);
        } else {
          settings = $.extend({}, settings, options);
          $this.data('tw.accordion', settings);
        }
        if (settings.url) {
          $.ajax({
            type: "post",
            async: false,
            url: settings.url,
            data: settings.param,
            success: function (data) {
              settings.data = data;
            }
          });
        }
        if (settings.fill) {
          $this.height("100%");
        }
        if (settings.data.length > 0) {
          $this.data("count", settings.data.length);
          $.each(settings.data, function () {
            this.level = 1;
            var item = $this.accordion("add", this);
            $this.append(item);
          });
          if ($this.find("." + settings.style.selected).length == 0) {
            var data = $this.find(">li:first-child").data("data");
            $this.accordion("select", data);
          }
        }
      });
    },
    add: function (data) {
      var $this = $(this);
      var settings = $this.data("tw.accordion");
      var item = $("<li class='" + settings.style.header + "'></li>");
      item.data("data", data);
      var header = $("<div class='" + settings.style.header_title + "' data-accordion='" + data.id + "'>" +
        "<i class='" + settings.style.icon_base + "" + data.icon + "'></i>" +
        "<span>" + data.name + "</span></div>");
      header.css("padding-left", settings.level_space * data.level);
      item.append(header);
      if (data.childrens) {
        var toggle = $("<i class='" + settings.style.icon_base + "" + settings.style.icon_collapse + "'></i>");
        toggle.css({ "font-size": "1.4em", "position": "absolute", "top": "7px", "right": "7px" });
        header.append(toggle);
        var content = $("<ul class='" + settings.style.content + "'></ul>");
        content.data("count", data.childrens.length);
        $.each(data.childrens, function () {
          this.level = data.level + 1;
          var child = $this.accordion("add", this);
          content.append(child);
        });
        item.append(content);
      }
      header.click(function () {
        $this.accordion("select", data);
      });
      if (data.selected) {
        $this.accordion("select", data);
      }
      return item;
    },
    select: function (data) {
      var $this = $(this);
      var settings = $this.data("tw.accordion");
      var header = $this.find("[data-accordion='" + data.id + "']");
      var item = header.parent();
      if (!header.hasClass(settings.style.selected) && !item.hasClass(settings.style.selected)) {
        var sibling = item.siblings();
        sibling.removeClass(settings.style.selected).children("." + settings.style.selected).removeClass(settings.style.selected);
        sibling.children("." + settings.style.icon_expand).removeClass(settings.style.icon_expand).addClass(settings.style.icon_collapse);
        if (data.childrens) {
          item.addClass(settings.style.selected);
          header.find("." + settings.style.icon_collapse).removeClass(settings.style.icon_collapse).addClass(settings.style.icon_expand);
          if (settings.fill) {
            var count = item.parent().data("count") - 1;
            item.css("height", "calc(100% - " + (item.height() * count) + "px)");
          }
        } else {
          header.addClass(settings.style.selected);
        }
      }
      if (settings.onitemclick) {
        settings.onitemclick(data);
      }
    },
    update: function (url, param) {
      var $this = $(this);
      var settings = $this.data("tw.accordion");
      if (typeof url == "object") {
        settings.param = url;
      } else {
        settings.url = url;
        settings.param = param;
      }
      $this.accordion("init", settings);
    },
    destroy: function (options) {
      return $(this).each(function () {
        var $this = $(this);
        $this.removeData('accordion');
      });
    }
  }
  $.fn.accordion = function () {
    var method = arguments[0];
    var args = arguments;
    if (typeof (method) == 'object' || !method) {
      method = methods.init;
    } else if (methods[method]) {
      method = methods[method];
      args = $.makeArray(arguments).slice(1);
    } else {
      $.error('Method ' + method + ' does not exist on tw.accordion');
      return this;
    }
    return method.apply(this, args);
  }
})(jQuery);
.accordion {
  margin:0;
  padding:0;
  font-size:14px;
}
  .accordion > .accordion-header {
    list-style: none;
    margin: 0;
    padding: 0;
    border-bottom: 1px solid #ddd;
  }
    .accordion > .accordion-header.selected > .accordion-header-title {
      color: #0094ff;
    }
    .accordion > .accordion-header > .accordion-header-title {
      position: relative;
      width: 100%;
      height: 35px;
      line-height: 35px;
      background: #eee;
      border-bottom: 1px solid #ccc;
      cursor: pointer;
    }
      .accordion > .accordion-header > .accordion-header-title > i:first-child {
        font-size: 1.3em;
      }
      .accordion > .accordion-header > .accordion-header-title > span {
        position: relative;
        top: -1px;
        left: 5px;
      }
    .accordion > .accordion-header > .accordion-content {
      display: none;
      width: 100%;
      height: calc(100% - 35px);
      margin: 0;
      padding: 0;
    }
    .accordion > .accordion-header.selected > .accordion-content {
      display: block;
    }
.accordion-content > .accordion-header {
    list-style: none;
    margin: 0;
    padding: 0;
}
  .accordion-content > .accordion-header.selected {
    color: #0094ff;
  }
  .accordion-content > .accordion-header > .accordion-header-title {
    position: relative;
    width: 100%;
    height: 32px;
    line-height: 32px;
    cursor: pointer;
    border-bottom: 1px solid #ccc;
  }
    .accordion-content > .accordion-header > .accordion-header-title:hover {
      background:#eee;
    }
    .accordion-content > .accordion-header > .accordion-header-title.selected {
      color: #fff;
      background: #0094ff;
      border-left: 3px solid #ff6a00;
      border-bottom: 0px;
    }
      .accordion-content > .accordion-header > .accordion-header-title > i:first-child {
        font-size: 1.2em;
      }
      .accordion-content > .accordion-header > .accordion-header-title > span {
        position: relative;
        top: -1px;
        left: 5px;
      }
      .accordion-content > .accordion-header > .accordion-header-title.selected > i:first-child {
        position:relative;
        left:-3px;
      }
      .accordion-content > .accordion-header > .accordion-header-title.selected > span {
        position: relative;
        top: -1px;
        left: 2px;
      }
    .accordion-content > .accordion-header > .accordion-content {
      display: none;
      width: 100%;
      height: calc(100% - 32px);
      margin: 0;
      padding: 0;
    }
    .accordion-content > .accordion-header.selected > .accordion-content {
      display: block;
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery
, jQuery手风琴插件
jquery手风琴效果
jquery accordion插件、jquery 手风琴插件、jquery手风琴菜单插件、jquery 自定义插件、jquery自定义插件开发,以便于您获取更多的相关知识。

时间: 2024-09-14 08:02:09

基于jQuery实现Accordion手风琴自定义插件_jquery的相关文章

基于jQuery实现Tabs选项卡自定义插件_jquery

控件这东西网上找的多少都有些功能不如意的,只能自己动手来写了. Tabs插件很多人都需要用到,网上也有很多的例子,但是不是风格不搭调就是用着不习惯(自己写的不一定比别人的好但用着顺手In love) 下面直接贴代码,不喜勿喷: (function ($) { 'use strict'; var defaults = { type: "iframe", onchanged: null, style: { header_panel: "tab-headers", con

基于jQuery实现的QQ表情插件_jquery

不废话了,先给大家展示效果图: 查看演示 下载源码 我们在QQ聊天或者发表评论.微博时,会有一个允许加入表情的功能,点击表情按钮,会弹出一系列表情小图片,选中某个表情图片即可发表的丰富的含表情的内容.今天和大家分享一款基于jQuery的QQ表情插件,您可以轻松将其应用到你的项目中. HTML 首先在html页面的head中引入jQuery库文件和QQ表情插件jquery.qqFace.js文件. <script type="text/javascript" src="j

基于jquery的15款幻灯片插件_jquery

1,Gallerific Galleriffic 是使用 Mike Alsup 的 jQuery Cycle plugin 创建的图片展示效果,包括缩略图.图片标题和描述等详细功能,是一个非常不错的高质量画廊相册展示工具. 2,ZoomImage zoomimage ,以一种独具魅力的方式展示图片效果.缩略图链接在本页弹出大图,并且可以可以随意拖拽该悬浮图片. 3,EasySlider Easy Slider 可以实现图片或其他任意内容,在水平或垂直方向上的滑动效果,你还可以通过 CSS 自定义

基于jQuery UI - Accordion 手风琴组件

这里的例子使用 jQuery UI 1.8.6 示例效果可以看 jQuery 网站中的例子. 手风琴效果将多个内容组织到多个逻辑组中,通过选择组的标题可以展开或者收缩组中的内容,使用效果很像 Tab,作为备选,还可以通过将鼠标放置到标题上来展开或者收缩. 使用这个组件需要引用 jQuery 脚本库,core, widget, accordion 脚本库. <script src="scripts/jquery-1.6.2.js"></script><scr

基于jQuery图片平滑连续滚动插件_jquery

* 此插件要求运行在jQuery v1.3 或更高版本上 * 插件可以实现图片平滑向上或向左滚动 * 如果您需要更多的效果或在使用中本插件存在BUG,可以给在彦磊的博客上留言,彦磊将尽自己最大努力完善此插件 * 您留言前请先到:http://gmarwaha.com/jquery/jcarousellite/ 上面下载jcarousellite插件 * 来和彦磊图片平滑滚动的插件相互补充使用以获取更多的图片效果 * 彦磊图片平滑滚动插件只是对jcarousellite插件的补充 * * * 技术

editable.js 基于jquery的表格的编辑插件_jquery

我的思路是这样的: 1.对任何一个 table, tr 都可以添加编辑.删除功能--功能独立 2.可以自动的完成编辑.取消功能,如点击编辑, 表格内容自动变成编辑框.下拉框等, 点击取消结束编辑状态 3.添加删除.确定(即更新)事件--只需要添加自己服务端的删除.更新代码就可以 4.能够自定义设置可编辑列,不可编辑列--方便定制编辑功能 下面是我实现的功能代码: editable.js 复制代码 代码如下: /* code: editable.js version: v1.0 date: 201

jQuery News Ticker 基于jQuery的即时新闻行情展示插件_jquery

效果图: jQuery news ticker是一个非常方便的jQuery插件,能够快速让你生成这样的一个新闻行情效果. 它能够通过列表,HTML甚至是RSS(只能加载本站的RSS feed)来生成新闻内容,并且支持前后播放和停止.这个插件支持一系列的自定义选项,例如: 播放速度 播放效果 播放方向 显示时间 代码开发简单高效. 首先引入jQuery news ticker类库及其jQuery类库: 复制代码 代码如下: <link href="css/ticker-style.css&q

基于jQuery实现网页进度显示插件_jquery

相信大家都见过类似的网站功能,这种形式的进度显示可以很方便的让用户去理解和操作, 以下是插件的测试截图 ,提供了两个皮肤 使用js编写 可以灵活的生成进度条 方便进对一些工作进度进行图形显示 1.简单的调用 //所有步骤的数据 var stepListJson=[{StepNum:1,StepText:"第一步"}, {StepNum:2,StepText:"第二步"}, {StepNum:3,StepText:"第三步"}, {StepNum:

jcarousellite.js 基于Jquery的图片无缝滚动插件_jquery

1.引入JS库,jquery.js脚本和插件脚本jcarousellite.js. 复制代码 代码如下: <script type="text/javascript" src="path/to/jquery.js"></script> <script type="text/javascript" src="path/to/jcarousellite.js"></script> 2