H5中的拖拽事件
最近浏览了张鑫旭大神的基于HTML5 drag/drop模块拖动插入排序删除完整实例,感觉受益匪浅。于是将最做的demo记录下来。
首先浏览一下事件,这些事件比较好记,只要记住用在谁的身上就好了,无非是被推拽的元素和目标元素。
被拖拽元素上触发的事件:
1.ondragstart - 用户开始拖动元素时触发
2.ondrag - 元素正在拖动时触发
3.ondragend - 用户完成元素拖动后触发
目标元素上触发的事件:
1.ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件
2.ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
3.ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件
4.ondrop - 在一个拖动过程中,释放鼠标键时触发此事件
另外需要的知识点就是event对象中的preventDefault()。引用张大神的原话:在ondragover中一定要执行preventDefault(),否则ondrop事件不会被触发。另外,如果是从其他应用软件或是文件中拖东西进来,尤其是图片的时候,默认的动作是显示这个图片或是相关信息,并不是真的执行drop。此时需要用用document的ondragover事件把它直接干掉。
于是乎我照样子做了个小demo,很好理解。代码如下:
html:
<div class="left" id = 'trash'>垃圾箱</div>
<div class="right">
<ul>
<li draggable = 'true'>1</li>
<li draggable = 'true'>2</li>
<li draggable = 'true'>3</li>
<li draggable = 'true'>4</li>
</ul>
</div>
css:
.left{
width: 100px;
height: 400px;
float: left;
margin-left: 20px;
margin-top: 20px;
background: #ccc;
font-size: 100px;
color: #fff;
}
.right{
width: 200px;
height: 400px;
float: left;
background: #fff;
margin-top: 20px;
cursor: move;
}
ul{
margin:;
padding:;
}
ul>li{
height:80px;
margin-bottom: 20px;
text-align: center;
list-style-type: none;
background: #f90;
line-height: 80px;
}
js
var arr_li = document.getElementsByTagName('li');
var trash = document.getElementById('trash');
var index = null;
for(var i = 0; i < arr_li.length; i++){
this.ondragstart = function(event){
event.dataTransfer.getData('text',event.target.innerHTML);
trash.style.color = 'red';
trash.innerHTML = '删除';
index = event.target;
this.style.cursor = 'move';
}
this.ondragend = function(event){
trash.style.color = '#fff';
trash.innerHTML = '垃圾箱';
}
}
trash.ondragover = function(event){
event.preventDefault();
}
trash.ondragenter = function(event){
this.style.color = 'blue';
}
trash.ondragleave = function(event){
this.style.color = 'red';
}
trash.ondrop = function(event){
event.preventDefault();
this.style.color = "#fff";
this.innerHTML = '垃圾箱';
index.parentNode.removeChild(index);
}
简单的效果图如下:

H5中的拖拽事件的更多相关文章
- [Qt]Qt中TreeWidget拖拽事件
文章在简书里啦 http://www.jianshu.com/p/45b740060aca
- 用H5自带拖拽做出购物车效果的作业题
效果描述: 图片代表物品,图片在有宽高的div上方显示,把图片拖放到设置好的div里面,并且在div里面显示图片的信息:价格,物品名,数量.如果拖放有重复,只是在div里面让物品的数量加1,最后计算出 ...
- H5原生拖拽事件
使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- html5拖拽事件 xhr2 实现文件上传 含进度条
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- iOS开发拓展篇—xib中关于拖拽手势的潜在错误
iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...
- HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态
多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption> ...
- iOS - xib中关于拖拽手势的潜在错误
iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...
- Duilib嵌入CEF禁止浏览器响应拖拽事件
转载:http://blog.csdn.net/liuyan20092009/article/details/53819473 转载:https://blog.csdn.net/u012778714( ...
- Android Launcher拖拽事件详解【android4.0--Launcher系列二】
AndroidICS4.0版本的launcher拖 拽的流程,基本和2.3的相似.就是比2.3写的封装的接口多了一些,比如删除类的写法就多了个类.等等.4.0的改变有一些,但是不是特别大.这个月一 直 ...
随机推荐
- WCF启用日志追踪
调用使用http post调用WCF Restful服务时,WCF会自动反序列化body里的实体,如果实体反序列化不成功时,会返回一个请求错误,让去看服务器日志.需要启用日志追踪功能,才能看到具体的情 ...
- 21.2 Partitioning Types
分区类型: range:根据列值得一个给定的范围 list:和range相似,除了分区被选择基于的列被匹配在一个被设定为分离的值 hash 基于列组成的表达式返回的非负值 key 相似hash ,除 ...
- 协同开发中SVN的使用建议
协同开发中SVN的使用建议 1. 注意个人账户密码安全 各员工需牢记各自的账户和密码,不得向他人透漏,严禁使用他人账户进行SVN各项操作(主要考虑每个SVN账号的使用者的权限范围问题).如有忘记,请 ...
- 高效Web开发的10个jQuery代码片段
原文转载:http://www.codeceo.com/article/10-jquery-snippets-web-dev.html
- 有关STL 标准模板库
1.vector 本质:对数组的封装 特点:读取能在常数时间内完成
- XCode 7.3.1(dmg) 官方直接下载地址
xcode7.3.1下载 https://idmsa.apple.com/IDMSWebAuth/login?appIdKey=891bd3417a7776362562d2197f89480a8547 ...
- Mac上的欧路词典单词本迁移到有道词典 #node.js
摘要 有道词典提供了柯林斯和朗文辞典,加上最近在背单词且Mac版的屏幕取词也够用了,为了云单词本的同步,决定抛弃Mac上的欧路词典.单词欧路上的单词本也存了一百多个单词.怎样迁移到有道呢? 关键词:n ...
- 关闭Win10自带的 Windows Defender
1.按下Win+R,输入gpedit.msc 2.进入组策略,选择计算机配置>管理模板>Windows 组件>Windows Defender 3.双击"关闭 Window ...
- sublime插件 cssComb实现css自动排序及格式化
cssComb是一个实现css代码自动排序,当然顺便也实现了代码的格式化 安装: 首先需要打开sublime搜索安装csscomb插件(前提是已经安装了sublime的package control) ...
- 介绍几个 window 下面的terminal
1. putty 配合 winscp 这个是标配 但是如果开多个ssh连接,管理起来很是不方便. 2. MTputty ,如果要管理多态机器,那么这个工具就是相当给力. 可以连接多个Tab,配置和保存 ...