html5拖拽
2015-12-12 15:45
489 查看
一. 页面内元素拖放
属性draggable,设置为true,元素可以拖放。拖放事件
拖拽元素事件:事件对象为被拖拽元素dragstart,拖拽前触发
drag,拖拽前到拖拽结束之间连续触发
dragend,拖拽结束触发
目标元素事件:事件对象为目标元素
- dragenter,进入目标元触发
- dragover,进入目标到离开目标之间连续触发
- dragleave,离开目标元素触发
- drop,在目标元素上释放鼠标触发
火狐下必须设置dataTransfer对象的setData方法才可以拖拽除图片外的其他标签
dataTransfer对象
setData():设置数据key和value(必须是字符串)getData():获取数据,根据key值,获取对应的value
effectAllowed:设置光标样式(none,copy,copyLink,copyMove,link,linkMove,move,all和uninitialized)
setDragImage:三个参数:指定的元素,坐标X,坐标Y
<style> #ul1 {list-style:none;} #ul1 li {width:100px; height:20px;background:gray; display:block; margin:10px;} #div1 {width:100px;height:100px; background:pink;margin:100px auto;} </style> <body> <ul id ="ul1"> <li draggable="true">a</li> <li draggable="true">b</li> <li draggable="true">c</li> </ul> <div id = "div1"> </div> <script> var oUl = document.getElementById("ul1"); var oli = document.getElementsByTagName("li"); var oDiv = document.getElementById("div1"); for(var i = 0; i < oli.length; i++) { oli[i].index = i; oli[i].ondragstart = function(ev) { var ev = ev || window.event; this.style.background = "blue"; for(var i = 0; i < oli.length; i++) { oli[i].index = i; } console.log(this.index); ev.dataTransfer.setData("index", this.index); } var num = 0; oli[i].ondrag = function() //在开始和结束之间一直执行 { document.title = num++; } oli[i].ondragend = function() { this.style.background = "gray"; } } oDiv.ondragenter = function() { this.style.background = "red"; } oDiv.ondragover = function(ev) { var ev = ev||window.event; //要想触发drop事件,必须在dragover中阻止默认事件 ev.preventDefault(); } oDiv.ondragleave = function() { this.style.background = "pink"; } oDiv.ondrop = function(ev) { ev = ev || window.event; this.style.background = "pink"; alert(ev.dataTransfer.getData("index")); if(oUl.hasChildNodes()) //当ul下还存在子节点时 { oUl.removeChild(oli[ev.dataTransfer.getData("index")]); } } </script> </body>
二. 外部文件拖放
dataTransfer对象的files
获取外部拖拽的文件,返回一个filesList列表,filesList下有个type属性,返回文件的类型。FileReader(读取文件信息)
readAsDataURL:参数为要读取的文件对象,将文件读取为DataUrlonload
当读取文件成功完成的时候触发
this.result,来获取读取的文件数据,如果是图片,将返回base64格式的图片数据
<style type="text/css"> #div1{ width: 200px; height: 200px; margin: 100px auto; background: red; } </style> <body> <div id="div1">将文件拖放至此区域</div> <ul id="ul1"></ul> <script type="text/javascript"> var oDiv = document.getElementById("div1"); var oUl = document.getElementById("ul1"); oDiv.ondragenter = function() { this.innerHTML = "鼠标可以释放"; } oDiv.ondragleave = function() { this.innerHTML = "将文件拖放至此区域"; } oDiv.ondragover = function(ev) { var ev = ev || window.event; ev.preventDefault(); } oDiv.ondrop = function(ev) { var ev = ev || window.event; ev.preventDefault(); var fs = ev.dataTransfer.files; alert(fs[0].type); var fd = new FileReader(); fd.readAsDataURL(fs[0]); fd.onload = function() { // alert(this.result); var li = document.createElement("li"); var img = document.createElement("img"); img.src = this.result; li.appendChild(img); oUl.appendChild(li); } } </script> </body>
相关文章推荐
- PHP中的HTML5应用 将Canvas图像保存到服务器
- 使用chrome调试H5页面的方法
- h5学习笔记(2)this 、循环赋值引用问题
- PHP中的HTML5应用 将Canvas图像保存到服务器
- 推荐阅读——MSDN有关html5两种矢量图形技术对边
- 用HTML5让传统企业应用可视化
- 『HTML5梦幻之旅』 - 动感圆圈
- HTML5 缓存
- HTML5 总结 (1)
- 比 H5 应用多一点原生应用小一点,流应用能不能将 H5 应用真正推广起来?
- html5 websocket 简单实现
- 创造更好的浏览体验-HTML5 history API
- Html5(1)
- 使用HTML5来实现本地文件读取和写入
- html5 图片上传版本1.0
- Html5进度条插件(自写)
- h5制作案例分享 路易威登系列二:展示的不仅仅是一场时装秀
- 用HTML5打造本地桌面应用
- 使用Flexible 实现手淘H5 页面的终端适配学习
- 打造H5动感影集的爱恨情仇(动画性能篇)