看张鑫旭大神的博客的笔记
原文地址:http://www.zhangxinxu.com/wordpress/?p=1419
var eleDustbin = $(".dustbin")[0],
eleDrags = $(".draglist"),
lDrags = eleDrags.length,
eleRemind = $(".dragremind")[0],
eleDrag = null;//用来保存正在拖拽的对象
for (var i=0; i<lDrags; i+=1) {
eleDrags[i].onselectstart = function() {
return false;
};
eleDrags[i].ondragstart = function(ev) {
/*拖拽开始*/
//拖拽效果
ev.dataTransfer.effectAllowed = "move";
ev.dataTransfer.setData("text", ev.target.innerHTML);
ev.dataTransfer.setDragImage(ev.target, 0, 0);
eleDrag = ev.target;
return true;
};
eleDrags[i].ondragend = function(ev) {
/*拖拽结束*/
ev.dataTransfer.clearData("text");
eleDrag = null;
return false
};
}
eleDustbin.ondragover = function(ev) {
/*拖拽元素在目标元素头上移动的时候*/
ev.preventDefault();
return true;
};
eleDustbin.ondragenter = function(ev) {
/*拖拽元素进入目标元素头上的时候*/
this.style.color = "#ffffff";
return true;
};
eleDustbin.ondrop = function(ev) {
/*拖拽元素进入目标元素头上,同时鼠标松开的时候*/
if (eleDrag) {
eleRemind.innerHTML = '<strong>"' + eleDrag.innerHTML + '"</strong>被扔进了垃圾箱';
eleDrag.parentNode.removeChild(eleDrag);
}
this.style.color = "#000000";
return false;
};
- 各个事件都在这了,可以用事件代理来改造。
- JQuery中的原生event时间是originalEvent。
- 做互相替换的效果,可以用拖放目标的innerHTML替换拖拽目标的。
- 最少使用三个事件就可以实现拖拽的效果。dragstart,dragover,drop这三个事件。