jquery插件开发示例(二)

(function(window, $, undefined) {
  $.fn.sidebar = function(options) {
    var defaults = {
      menuoverevent: ‘mouseover‘,
      menuleaveevent: ‘mouseleave‘,
      foldevent: ‘click‘,
      menuThumbnailSelector: ".menu-thumbnail",
      menumeta: [‘flow‘, ‘account‘, ‘common‘, ‘recent‘], //menudata中数据顺序必须和menudata顺序保持一致
      menudata: [{
        menu: ‘flow‘,
        title: ‘业务流程管理‘,
        content: [
          ‘货前管理‘,
          ‘货中管理‘,
          ‘货后管理‘,
          ‘其他‘
        ]
      }, {
        menu: ‘account‘,
        title: ‘核算‘,
        content: [
          ‘还款计算排定‘,
          ‘逾期呆滞利息计算‘,
          ‘财务核算‘
        ]
      }, {
        menu: ‘common‘,
        title: ‘常用‘,
        content: [
          ‘合同‘,
          ‘合作商‘,
          ‘风险分类‘,
          ‘交易流水‘,
          ‘账务流水‘,
          ‘抵制押贷款‘
        ]
      }, {
        menu: ‘recent‘,
        title: ‘最近访问‘,
        content: [
          ‘合同‘,
          ‘合作商‘,
          ‘财务核算‘
        ]
      }]
    };
    settings = $.extend({}, defaults, options);
    return this.each(function() {
      return new Sidebar(this, settings);
    });
  };

  function Sidebar(el, settings) {
    this.$el = $(el);
    this.settings = settings;
    this.$menulist = this.$el.find(‘.menu‘);
    this.$thumbnailBox = this.$el.find(settings.menuThumbnailSelector);

    this.init();
  }
  Sidebar.prototype = {
    init: function() {
      this.createView();
      this.attachEvents();
    },
    createView:function () {
      var index=this.settings.menumeta.indexOf(‘common‘);
      var data=this.settings.menudata[index];

      var $commonBox=this.$el.find(‘.common‘);
      var $title=$(‘<h3>‘+data.title+‘</h3>‘);
      var $lists=$(‘<ul>‘);
      $.each(data.content,function (index,val) {
        $lists.append($(‘<li><a href=""><i></i>‘ + val + ‘</a></li>‘));
      });

      $commonBox.append($title).append($lists);

    },
    attachEvents: function() {
      var _self = this;

      _self.$menulist.on(‘show‘, $.proxy(_self.showMenu,_self));
      _self.$menulist.on(‘hide‘, $.proxy(_self.hideMenu,_self));

      _self.$menulist.on(_self.settings.menuoverevent, function() {
        _self.$menulist.trigger(‘show‘,this);
      });
      _self.$menulist.on(_self.settings.menuleaveevent, function(e) {
        if (checkPointerInDiv(e, _self.$thumbnailBox[0])) {
          $(this).addClass(‘on‘);
          return;
        }
        _self.$menulist.trigger(‘hide‘,this);
      });
      _self.$thumbnailBox.on(_self.settings.menuleaveevent, function(e) {
        _self.$menulist.trigger(‘hide‘,this);
      });

    },
    createMenu: function(eventElem) {
      var menuIndex = this.settings.menumeta.indexOf($(eventElem).data(‘menu‘));
      var menuData = this.settings.menudata[menuIndex];

      var $box = $(‘<div class=‘ + menuData.menu + ‘></div‘);
      var $title = $(‘<h3>‘ + menuData.title + ‘</h3>‘);
      var $lists = $(‘<ul>‘);
      $.each(menuData.content, function(index, val) {
        $lists.append($(‘<li><i></i>‘ + val + ‘</li>‘));
      });
      if ($(eventElem).hasClass(‘menu-thumb‘)) {
        $box.append($title);
      }
      $box.append($lists);

      this.$thumbnailBox.html(‘‘);
      this.$thumbnailBox.append($box).css({
        left: this.$el.width(),
        top: $(eventElem).offset().top
      });
    },
    showMenu: function(e, eventElem) {
      this.createMenu(eventElem);
      this.$thumbnailBox.show();
    },
    hideMenu: function(e, eventElem) {
      this.$menulist.removeClass(‘on‘);
      this.$thumbnailBox.hide();
    }

  };

  function checkPointerInDiv(event, elem) {
    var _posX = event.clientX,
      _posY = event.clinetY;

    var elemX1 = elem.offsetLeft,
      elemY1 = elem.offsetTop;

    var elemX2 = elemX1 + elem.offsetWidth,
      elemY2 = elemY1 + elem.offsetHeight;

    if (_posX < elemX1 || _posX > elemX2 || _posY < elemY1 || _posY > elemY2) {
      return false;
    }
    return true;
  }

}(window, jQuery));
时间: 2024-12-17 15:06:01

jquery插件开发示例(二)的相关文章

jquery插件开发示例

/****通用部分 BEGIN *****/$.fn.sidebar = function(options) { var defaults = { event: 'click' }, settings = $.extend({}, defaults, options); return this.each(function() { return new Sidebar(this, settings); });/}; /****通用部分 END *****/ function Sidebar(el,

jQuery插件开发精品教程(让你的jQuery更上一个台阶)

刘哇勇的部落格要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发

JQuery插件开发精品教程,让你的jQuery提升一个台阶

本文转载自 http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择.

jQuery插件开发---转载

要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,

跟我一起学JQuery插件开发

http://www.cnblogs.com/Leo_wl/archive/2012/04/06/2435511.html 以前一直比较好奇,jquery插件是怎么开发的,怎么写属于自己的插件? 昨天在逛codeproject网站的时候,突然看到一篇文章:How to write plugin in Jquery. 如果对E文好的同学 ,可以看上面的连接. 现在我把上面网站的及结合自己的想法写这篇文章.希望能得到大牛们的支持和谅解...大鸟飞过...欢迎拍装. 资料来源: [1]How to w

JavaScript学习总结(四)——jQuery插件开发与发布

JavaScript学习总结(四)--jQuery插件开发与发布 目录 一.插件开发基础 1.1.$.extend 1.1.1.扩展属性或方法给jQuery 1.1.2.扩展对象 1.2.$.fn.extend 1.3.$.fn 二.插件开发 2.1.jQuery插件开发基本模式 2.2.获取上下文 2.3.第一个jQuery插件 2.4.链式编程 2.5.参数与默认值 2.5.1.默认值 2.5.2.参数对象 2.5.2.参数类型 2.6.命名空间与面向对象 2.7.插件与关联的CSS 2.8

(转)jQuery插件开发精品教程,让你的jQuery提升一个台阶

转自: http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本

转:jQuery插件开发精品教程,让你的jQuery提升一个台阶

要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,

【转载】jQuery插件开发教程一

要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,