关于 HTML5 中的拖动功能。 更多信息可以查看我们 HTML 教程中的 HTML5 拖放。以下 我只做一下简介。
1 如果你想让元素变得可拖动,首先 你得对元素设置 draggable 属性 此属性可以让元素变得可以拖动,当然 链接和 图片是默认允许拖动的 可以不对其设置 draggable 属性。
2 元素在拖动下 会触发以下事件
2.1 在被拖动目标上触发的事件
ondragstart——即用户开始拖动元素时触发
ondrag -——元素正在拖动时触发
ondragend - 用户完成元素拖动后触发
2.2 在其他对象容器中触发的事件
ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件
ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件
ondrop - 在一个拖动过程中,释放鼠标键时触发此事件

1 /* 拖动时触发*/ 2 document.addEventListener("dragstart", function(event) { 3 //dataTransfer.setData()方法设置数据类型和拖动的数据 4 event.dataTransfer.setData("Text", event.target.id); 5 // 拖动 p 元素时输出一些文本 6 document.getElementById("demo").innerHTML = "开始拖动 p 元素."; 7 //修改拖动元素的透明度 8 event.target.style.opacity = "0.4"; 9 }); 10 //在拖动p元素的同时,改变输出文本的颜色 11 document.addEventListener("drag", function(event) { 12 document.getElementById("demo").style.color = "red"; 13 }); 14 // 当拖完p元素输出一些文本元素和重置透明度 15 document.addEventListener("dragend", function(event) { 16 document.getElementById("demo").innerHTML = "完成 p 元素的拖动"; 17 event.target.style.opacity = "1"; 18 }); 19 /* 拖动完成后触发 */ 20 // 当p元素完成拖动进入droptarget,改变div的边框样式 21 document.addEventListener("dragenter", function(event) { 22 if ( event.target.className == "droptarget" ) { 23 event.target.style.border = "3px dotted red"; 24 } 25 }); 26 // 默认情况下,数据/元素不能在其他元素中被拖放。对于drop我们必须防止元素的默认处理 27 document.addEventListener("dragover", function(event) { 28 event.preventDefault(); 29 }); 30 // 当可拖放的p元素离开droptarget,重置div的边框样式 31 document.addEventListener("dragleave", function(event) { 32 if ( event.target.className == "droptarget" ) { 33 event.target.style.border = ""; 34 } 35 }); 36 /*对于drop,防止浏览器的默认处理数据(在drop中链接是默认打开) 37 复位输出文本的颜色和DIV的边框颜色 38 利用dataTransfer.getData()方法获得拖放数据 39 拖拖的数据元素id("drag1") 40 拖拽元素附加到drop元素*/ 41 document.addEventListener("drop", function(event) { 42 event.preventDefault(); 43 if ( event.target.className == "droptarget" ) { 44 document.getElementById("demo").style.color = ""; 45 event.target.style.border = ""; 46 var data = event.dataTransfer.getData("Text"); 47 event.target.appendChild(document.getElementById(data)); 48 } 49 });
传送门:http://blog.csdn.net/ssisse/article/details/52628739