实例:拖拽列表插件
最后更新于:2022-04-02 03:24:44
[TOC]
```
';
该节点可拖拉
123
123
123
不可放置区
//javascript
(function (win) {
'use strict';
var document=win.document;
/**
*
* @param allowDrag 允许拖拽的 node 默认 .draggable
* @param allowDrop 允许放置的 node 默认 .dropzone
* @param callback 回调函数
*/
function drop(allowDrag,allowDrop,callback) {
var DropNode = allowDrag;
var DragNode = allowDrop;
var Drag = removeTag(DragNode);
var Drop = removeTag(DropNode);
var callback = callback;
var node;
//设置拖拽属性
setdrag(DragNode);
//拖拉节点
document.addEventListener('drag',function (e) {
node = e.target;
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
node.style.backgroundColor='#ccc';
node.style.opacity=0.5;
},false);
document.addEventListener('dragstart',function (e) {
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
e.target.style.backgroundColor=''
},false);
document.addEventListener('dragend',function (e) {
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
e.target.style.backgroundColor='';
e.target.style.opacity='';
},false);
//目标节点
document.addEventListener('dragenter',function (e) {
if (isSupport(e)){
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
e.target.style.backgroundColor = '';
}
},false);
document.addEventListener('dragover',function (e) {
event.preventDefault();
if (isSupport(e)){
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
e.target.style.backgroundColor='#ccc';
}
},false);
document.addEventListener('dragleave',function (e) {
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e);
return true;
}
e.target.style.backgroundColor='';
},false);
document.addEventListener('drop',function (e) {
var target = e.target;
target.style.backgroundColor='';
if (isSupport(e)){
if (typeof callback !='undefined' && typeof callback[e.type] !='undefined'){
callback[e.type](e,node);
return true;
}
node.parentNode.removeChild(node);
target.appendChild(node);
}
});
//判断是否指定node
function isSupport(e){
var classList = e.target.classList;
if(Array.prototype.indexOf.call(classList,Drop)===-1) {
return false;
}
return true;
}
/**
* 移除 # . 等操作
* @param allowDrag
*/
function removeTag(allowDrag) {
var list=["#",'.'];
var need=false;
list.forEach(function (item) {
if (allowDrag.indexOf(item)!==-1){
need=true;
}
})
if (need){
allowDrag = allowDrag.slice(1);
}
return allowDrag;
}
function setdrag (allowDrag) {
var nodeList = document.querySelectorAll(allowDrag);
nodeList.forEach(function (item) {
item.setAttribute('draggable',true)
});
}
};
win.drop = drop;
})(window);
//===============================================
//方式一
// drop('.dropzone','.draggable');
//方式二:
drop('.dropzone','.draggable',{
drag:function(e){
e.target.style.backgroundColor='#ccc';
e.target.style.opacity=0.5;
},
dragstart:function(e){
e.target.style.backgroundColor='red'
},
dragend:function(e){
e.target.style.backgroundColor='';
e.target.style.opacity='';
},
dragenter:function(e){
e.target.style.backgroundColor = 'blue';
},
dragover:function(e){
e.target.style.backgroundColor='green';
},
dragleave:function(e){
e.target.style.backgroundColor='';
},
drop:function (e,node) {
node.parentNode.removeChild(node);
e.target.appendChild(node);
}
});
```