国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jquery拖拽自動排序插件使用方法詳解

2019-11-19 12:25:58
字體:
來源:轉載
供稿:網友

本文為大家分享了jquery拖拽自動排序插件,供大家參考,具體內容如下

該插件并不是原生js寫的,是基于jquery的,想看原生的話,請繞道而行。

html:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="drag.js"></script> <style type="text/css">  div{   height: 200px;   overflow-y: auto;  }  ul{   margin: 0;   padding: 0;   list-style: none;   box-shadow: rgba(0, 0, 0, 0.2) 5px 5px 10px;   display: inline-block;  }  .drag-item{   width: 100px;   padding: 0 10px;   line-height: 38px;   cursor: move;  }  .draging{   background-color: #ccc !important;  }  .no-draging{   background-color: #fff !important;  } </style></head><body> <ul class="drag-box"> </ul></body><script type="text/javascript"> new Drag({  container: '.drag-box',  data: ['應用1','應用2','應用3','應用4','應用5','應用6','應用7','應用8','應用9'] });</script></html>

js:

(function(win){ function Drag(opts){  this.init(opts); }; Drag.prototype = {  constructor: Drag,  options: {   container: '',   data: [], //可以是數據,也可以是html標簽   className: 'item'  },  //初始化   init: function(opts){   $.extend(this.options, opts);   this.$el = $(this.get('container'));   this._render();   this._bindEvent();  },  get: function(key){   return this.options[key];  },  set: function(key, value){   this.options[key]=value;  },  //渲染列表  _render: function(){   var me = this, lis = '',    data = me.get('data') || [];   for(var i=0,len=data.length;i<len;i++) lis+='<li class="drag-item" id="drag-item-'+i+'">'+ data[i]+'</li>';   me.$el.append(lis)     .find('li').attr('draggable',true)        .addClass(this.get('className'));  },  //綁定事件  _bindEvent: function(){   var me = this,    $lis = $('li', me.$el),    events = ['dragstart', 'dragenter', 'dragover', 'drop', 'dragend'];   $.each(events, function(index, item){    $lis.on(item, function(e){     me['_'+item+'Handle'] && me['_'+item+'Handle'](e, me);    });   })   $lis.hover(function(){    $(this).css('background-color','#eee');   },function(){    $(this).css('background-color','#fff');   });  },  //開始拖動  _dragstartHandle: function(e){   var me = this,oe = e.originalEvent;   if(oe.dataTransfer){    oe.dataTransfer.setData('text', '');   }   me.$drag = $(e.currentTarget);   $('li',me.$el).removeClass('item-hover');   me.$drag.addClass('draging').siblings().addClass('no-draging');  },  _dragenterHandle: function(e){   var me = this;   me.$drop = $(e.currentTarget);   if(me.timer){clearTimeout(me.timer)} //事件控制   me.timer = setTimeout(function(){    if(me.$drag.attr('id') !== me.$drop.attr('id')){     me._createMask();     if(me.$drag.index()<me.$drop.index()) me.$drag.insertAfter(me.$drop);     else me.$drag.insertBefore(me.$drop);    }   }, 30);  },  _dragoverHandle: function(e){   var oe = e.originalEvent;   e.preventDefault();   return false;  },  _dropHandle: function(e){   e.preventDefault();   e.stopPropagation();   return false;  },  //拖動結束  _dragendHandle: function(e){   var me = this;   me.$mask && me.$mask.remove();   setTimeout(function(){    $('li', me.$el).removeClass('draging no-draging');   },30);  },  //創建遮罩  _createMask: function(){   var me = this,$mask = me.$mask = $('<div class="drag-mask"></div>');   $mask.css({    position: 'absolute',    width: me.$drop.outerWidth(),//new    height: me.$drop.outerHeight(),//new    left: me.$drop.position().left,    top: me.$drop.position().top+me.$el.scrollTop(),//new    backgroundColor: '#fff'   });   $mask.on({    'drop': me._dropHandle,    'dragover': me._dragoverHandle   });   this.$el.find('.drag-mask').remove();   this.$el.append($mask);  } }; win.Drag = Drag;})(window);

踩得坑:

1、關于dataTransfer, 事件對象e中是沒有該屬性的,要找該屬性應該通過e.originalEvent.dataTransfer中去找。

2、兼容火狐瀏覽器。如果不這樣操作,火狐下是無法運行的:

if(oe.dataTransfer){ oe.dataTransfer.setData('text', '');}

3、dragover事件每隔 350 毫秒會被觸發一次。

4、dragstart、dragenter、dragend事件通過jquery綁定,事件處理函數中的this指向最外層對象,例如上面的new Drag();dragover、drop事件通過jquery綁定,事件處理函數中的this指向被綁定的html標簽。

5、jquery獲取包括padding的寬度調用:$el.outerWidth()$el.outerHeight()

6、只有屬性draggable="true"的元素才可以被拖動。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安阳市| 克什克腾旗| 平江县| 保康县| 旬阳县| 巴楚县| 英德市| 沅江市| 鞍山市| 定日县| 娱乐| 阿拉善右旗| 桃园市| 澎湖县| 陵水| 萨嘎县| 卢氏县| 德兴市| 武安市| 玉龙| 柘城县| 南江县| 伊川县| 高雄县| 洱源县| 高唐县| 华阴市| 科尔| 岳普湖县| 无为县| 柳州市| 佳木斯市| 柳林县| 岚皋县| 崇左市| 沅江市| 红安县| 沅江市| 长垣县| 榕江县| 宁强县|