jquery拖拽自動(dòng)排序插件使用方法詳解
本文為大家分享了jquery拖拽自動(dòng)排序插件,供大家參考,具體內(nèi)容如下
該插件并不是原生js寫的,是基于jquery的,想看原生的話,請(qǐng)繞道而行。
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: ['應(yīng)用1','應(yīng)用2','應(yīng)用3','應(yīng)用4','應(yīng)用5','應(yīng)用6','應(yīng)用7','應(yīng)用8','應(yīng)用9']
});
</script>
</html>
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<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');
});
},
//開始拖動(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()<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;
},
//拖動(dòng)結(jié)束
_dragendHandle: function(e){
var me = this;
me.$mask && me.$mask.remove();
setTimeout(function(){
$('li', me.$el).removeClass('draging no-draging');
},30);
},
//創(chuàng)建遮罩
_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、關(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)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 簡單的jQuery拖拽排序效果的實(shí)現(xiàn)(增強(qiáng)動(dòng)態(tài))
- 針對(duì)后臺(tái)列表table拖拽比較實(shí)用的jquery拖動(dòng)排序
- jQuery實(shí)現(xiàn)div橫向拖拽排序的簡單實(shí)例
- 通過jquery-ui中的sortable來實(shí)現(xiàn)拖拽排序的簡單實(shí)例
- jQuery拖拽排序插件制作拖拽排序效果(附源碼下載)
- jquery拖拽排序簡單實(shí)現(xiàn)方法(效果增強(qiáng)版)
- jqueryUI里拖拽排序示例分析
- 簡單的jquery拖拽排序效果實(shí)現(xiàn)代碼
相關(guān)文章
jQury Ajax使用Token驗(yàn)證身份實(shí)例代碼
這篇文章主要介紹了jQury Ajax使用Token驗(yàn)證身份實(shí)例代碼,需要的朋友可以參考下2017-09-09
JQuery事件e參數(shù)的方法preventDefault()取消默認(rèn)行為
JQuery事件的e參數(shù)的方法preventDefault()可以取消對(duì)象的默認(rèn)行為,下有個(gè)不錯(cuò)的示例,大家可以參考下,希望對(duì)大家有所幫助2013-09-09
Jquery 復(fù)選框取值兼容FF和IE8(測(cè)試有效)
Jquery 復(fù)選框取值的文章網(wǎng)上有很多的,不過可以同時(shí)兼容FF和IE8的確實(shí)沒有幾個(gè),下面有個(gè)不錯(cuò)的方法經(jīng)測(cè)試有效2013-10-10
jQuery html()方法使用不了無法顯示內(nèi)容的問題
jquery中的html方法使用不了,只能用完最基本的innerHTML把內(nèi)容展示出來2014-08-08
jquery入門必備的基本認(rèn)識(shí)及實(shí)例(整理)
本文整理了一些jquery入門必備的基本知識(shí)及相關(guān)實(shí)例,適合初學(xué)者學(xué)習(xí),另附一些jquery的常用事件,感興趣的各位可不要錯(cuò)過了哈2013-06-06
jquery實(shí)現(xiàn)九宮格大轉(zhuǎn)盤抽獎(jiǎng)
jQuery九宮格大轉(zhuǎn)盤抽獎(jiǎng)代碼網(wǎng)頁特效,點(diǎn)擊抽獎(jiǎng)按鈕開始隨機(jī)抽獎(jiǎng)選擇獎(jiǎng)品,可設(shè)置起點(diǎn)位置、獎(jiǎng)品數(shù)量、轉(zhuǎn)動(dòng)次數(shù)、中獎(jiǎng)位置參數(shù)2015-11-11
jQuery實(shí)現(xiàn)的自定義滾動(dòng)條實(shí)例詳解
這篇文章主要介紹了jQuery實(shí)現(xiàn)的自定義滾動(dòng)條,結(jié)合完整實(shí)例詳細(xì)分析了jQuery自定義滾動(dòng)條的實(shí)現(xiàn)步驟與相關(guān)操作技巧,并給出了jquery.jscroll.js插件的完整代碼,需要的朋友可以參考下2016-09-09

