• 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));
  • 相关阅读:
    Socket 传送文件
    spring
    Hibernate学习笔记
    servlet之过滤器(转载)
    java 网络编程
    java 文件操作
    java 图形界面 邮件系统
    简易俄罗斯方块
    二叉树习题之重建二叉树
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/byronvis/p/5220997.html
Copyright © 2020-2023  润新知