zoukankan      html  css  js  c++  java
  • 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));
  • 相关阅读:
    Linux系统管理
    Linux命令—压缩及其他
    Linux命令—文件目录
    SQL基本函数
    35.app后端搜索入门
    Java-希尔排序
    Android 显示意图和隐式意图的差别
    做webapp 使用JS来检測游览器是什么类型,或android是什么版本
    用iframe在您的站点中增加findjar的功能
    HDU 4026 Unlock the Cell Phone( 状态压缩 )
  • 原文地址:https://www.cnblogs.com/byronvis/p/5220997.html
Copyright © 2011-2022 走看看