本文為大家分享了jquery拖拽自動(dòng)排序插件,供大家參考,具體內(nèi)容如下
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、遼源網(wǎng)站維護(hù)、網(wǎng)站推廣。
該插件并不是原生js寫的,是基于jquery的,想看原生的話,請(qǐng)繞道而行。
html:
Document
js:
(function(win){ function Drag(opts){ this.init(opts); }; Drag.prototype = { constructor: Drag, options: { container: '', data: [], //可以是數(shù)據(jù),也可以是html標(biāo)簽 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'+ data[i]+''; 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'); }); }, //開始拖動(dòng) _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()
踩得坑:
1、關(guān)于dataTransfer, 事件對(duì)象e中是沒有該屬性的,要找該屬性應(yīng)該通過e.originalEvent.dataTransfer中去找。
2、兼容火狐瀏覽器。如果不這樣操作,火狐下是無法運(yùn)行的:
if(oe.dataTransfer){ oe.dataTransfer.setData('text', ''); }
3、dragover事件每隔 350 毫秒會(huì)被觸發(fā)一次。
4、dragstart、dragenter、dragend事件通過jquery綁定,事件處理函數(shù)中的this指向最外層對(duì)象,例如上面的new Drag();dragover、drop事件通過jquery綁定,事件處理函數(shù)中的this指向被綁定的html標(biāo)簽。
5、jquery獲取包括padding的寬度調(diào)用:$el.outerWidth()和$el.outerHeight()。
6、只有屬性draggable="true"的元素才可以被拖動(dòng)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。