Html5 拖拽
2017-03-26 10:38
85 查看
Html5 拖拽
概念拖拽:通过鼠标操作,将源(img div 一段文本) 对象拖拽至目标对象。
源对象:指的是我们鼠标点击的一个事物,这里可以是一张图片,一个DIV,一段文本等等。
目标对象:指的是我们拖动源对象后移动到一块区域,源对象可以进入这个区域,可以在这个区域上方悬停(未松手),可以释松手释放将源对象放置此处(已松手),也可以悬停后离开该区域。
拖拽技术实现
原生DOM
使用jQuery插件(其它第三方插件)
HTML5 中提供的拖拽功能
draggable 允许/禁用 拖拽功能。
拖拽触发事件
源对象事件
dragstart - 当鼠标开始拖放时被触发
drag - 当鼠标拖放过程中,类似于mousemove
dragend - 当鼠标拖放结束时触发
目标对象事件
dragenter - 源对象拖动着进入目标对象时
dragover - 源对象停留在目标对象上方时
dragleave - 源对象拖动着离开目标对象时
drop - 源对象拖动着在目标对象上方释放/松开鼠标
拖动源对象事件 和 目标对象事件中传递数据
拖动事件新属性 e.dataTransfer
功能:用于在源对象和目标对象的事件间传递数据。
数据保存
e.dataTransfer.setData( k , v ) //k, v 必须都是string类型
数据读取
e.dataTransfer.getData( k )
拖拽案例
随鼠标拖动的飞机
clientX,clientY 相对于浏览器的偏移值
screenX,screenY 相对于显示器的偏移值
offsetX,offsetY 相对于源对象的偏移值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>拖动的飞机</title> <style> body{ position:relative; } #imgPlane{ position:absolute; } </style> </head> <body> <h1>拖动的飞机</h1> <hr> <img id="imgPlane" src="img/p3.png" draggable="true"> <script> var plane = document.getElementById("imgPlane"); var offsetX,offsetY; plane.addEventListener("dragstart",function(e){ offsetX = e.offsetX; //获取鼠标偏移值 offsetY = e.offsetY; //获取鼠标偏移值 console.log("开始拖拽",e); }); plane.addEventListener("drag",function(e){ var x = e.clientX; //获取鼠标当前坐标 var y = e.clientY; //获取鼠标当前坐标 if( x==0 && y==0 ){ //鼠标松开之前最后一次drag事件无法获取坐标,所以要进行判断。 return; } x -= offsetX; //调整偏移值 y -= offsetY; //调整偏移值 plane.style.left = x + "px"; //设置最终坐标 plane.style.top = y + "px"; //设置最终坐标 console.log("飞机拖拽中....",e); }); plane.addEventListener("dragend",function(e){ console.log("结束拖拽",e) }); </script> </body> </html>
2. 将飞机拖入回收站
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ text-align:center; } #dustbin{ opacity:.3; } </style> </head> <body> <h1>拖动飞机至回收站</h1> <hr> <img id="dustbin" src="img/dustbin.png"> <hr> <img id="p1" class="plane" src="img/p3.png"> <img id="p2" class="plane" src="img/p4.png"> <img id="p3" class="plane" src="img/p5.png"> <script> var planes = document.getElementsByClassName("plane"); for(var i=0; i<planes.length; i++){ planes[i].addEventListener("dragstart",function(e){ //绑定事件 e.dataTransfer.setData("PlaneID",< 4000 span class="hljs-keyword">this.id); //保存当前操作对象id }) } var dustbin = document.getElementById("dustbin"); dustbin.addEventListener("dragenter",function(e){ console.log("拖动进入"); dustbin.style.opacity = 1; //设置垃圾箱透明度效果 }); dustbin.addEventListener("dragover",function(e){ console.log("拖动至目标内"); e.preventDefault(); //阻止默认操作,实现可拖拽 }); dustbin.addEventListener("drop",function(e){ console.log("松开拖动"); dustbin.style.opacity = .3; var planeId = e.dataTransfer.getData("PlaneID"); //获取当前拖拽对象 var p = document.getElementById(planeId); p.parentNode.removeChild(p); //从DOM树移除对象 }); dustbin.addEventListener("dragleave",function(e){ console.log("拖动离开"); dustbin.style.opacity = .3; }); </script> </body> </html>
补充:将客户端本地文件拖入浏览器中
相关文章推荐
- HTML5编程实战之三:图片文本(txt)拖拽预览
- HTML5拖拽API
- html5拖拽
- html5 拖拽的简要介绍
- html5简单拖拽实现自动左右贴边+幸运大转盘
- HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一)
- html5新增拖拽和拖放功能介绍:
- HTML5 拖拽上传
- [开源应用]利用HTTPHandler+resumableJs+HTML5实现拖拽上传[大]文件
- 使用HTML5拖拽实现表格列移动
- Drag/Drop---突袭HTML5之Javascript API扩展4 - 拖拽
- html5 - 拖拽属性简易介绍
- HTML5批量拖拽图片到网页
- 【转】 HTML5 元素拖拽 移动删除效果
- HTML5应用之文件拖拽上传
- HTML5简单的拖拽实现
- 基于html5 的拖拽连线
- 给力的 Google HTML5 训练营(HTML5 Drag&amp;Drop 拖拽、FileReader实例教程
- [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)
- HTML5 鼠标拖拽以及web存储