最近浏览了张鑫旭大神基于HTML5 drag/drop模块拖动插入排序删除完整实例,感觉受益匪浅。于是将最做的demo记录下来。

  首先浏览一下事件,这些事件比较好记,只要记住用在谁的身上就好了,无非是被推拽的元素和目标元素。

    被拖拽元素上触发的事件:

  1.ondragstart - 用户开始拖动元素时触发

  2.ondrag - 元素正在拖动时触发

  3.ondragend - 用户完成元素拖动后触发

    目标元素上触发的事件:

  1.ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件

  2.ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件

  3.ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件

  4.ondrop - 在一个拖动过程中,释放鼠标键时触发此事件

  另外需要的知识点就是event对象中的preventDefault()。引用张大神的原话:在ondragover中一定要执行preventDefault(),否则ondrop事件不会被触发。另外,如果是从其他应用软件或是文件中拖东西进来,尤其是图片的时候,默认的动作是显示这个图片或是相关信息,并不是真的执行drop。此时需要用用documentondragover事件把它直接干掉。

  于是乎我照样子做了个小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中的拖拽事件的更多相关文章

  1. [Qt]Qt中TreeWidget拖拽事件

    文章在简书里啦 http://www.jianshu.com/p/45b740060aca

  2. 用H5自带拖拽做出购物车效果的作业题

    效果描述: 图片代表物品,图片在有宽高的div上方显示,把图片拖放到设置好的div里面,并且在div里面显示图片的信息:价格,物品名,数量.如果拖放有重复,只是在div里面让物品的数量加1,最后计算出 ...

  3. H5原生拖拽事件

    使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  4. html5拖拽事件 xhr2 实现文件上传 含进度条

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. iOS开发拓展篇—xib中关于拖拽手势的潜在错误

    iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...

  6. HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态

    多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption> ...

  7. iOS - xib中关于拖拽手势的潜在错误

    iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...

  8. Duilib嵌入CEF禁止浏览器响应拖拽事件

    转载:http://blog.csdn.net/liuyan20092009/article/details/53819473 转载:https://blog.csdn.net/u012778714( ...

  9. Android Launcher拖拽事件详解【android4.0--Launcher系列二】

    AndroidICS4.0版本的launcher拖 拽的流程,基本和2.3的相似.就是比2.3写的封装的接口多了一些,比如删除类的写法就多了个类.等等.4.0的改变有一些,但是不是特别大.这个月一 直 ...

随机推荐

  1. SDF文件的用途

    标准延迟格式(英语:Standard Delay Format, SDF)是电气电子工程师学会关于集成电路设计中时序描述的标准表达格式.在整个设计流程中,标准延迟格式有着重要的应用,例如静态时序分析和 ...

  2. 记一次项目中的css样式复用

    本文同步至微信公众号:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401616238&idx=1&sn=3c6e9 ...

  3. Peterson算法

    #define FALSE 0 #define TRUE 1 #define N 2 /*进程数量 */ int turn; /* 现在轮到谁 */ int interested[N]; /*所有值初 ...

  4. 线性代数和numpy——黑板客老师课程学习

    一.代数是什么 代数->数的抽象表示->向量空间(线性空间) 线代->线性代数 关系: 向量空间之间和内部转换是通过线性变换. 实数——一维空间的点 复数——二维空间的点 如果两个向 ...

  5. map创建JSONObject对象

    public static void mapToJSONObject(){ Map<String, Object> map = new HashMap<String,Object&g ...

  6. 将C#datagridview控件的数据导出到Excel中

    1.添加引用Microsoft.Office.Interop.Excel. 2.程序代码引用using Excel = Microsoft.Office.Interop.Excel; 3.控件事件代码 ...

  7. dg

    package excel; import java.util.Scanner; public class doExcel { public static void main(String args[ ...

  8. button点击ajax异步无效的处理办法,以及实现“关注”“已关注”切换

    button并不是在只等于submit时草有提交功能,如果你用它触发ajax事件,你的ajax会失去他最大的优势:刷新局部数据! 但是你如果设置了他的return false;属性小伙伴你的ajax才 ...

  9. ANDROID开发之问题积累及解决方案(一)

    一.activity跳转及传值 当进行activity之间的跳转时我们会遇到这样的问题.首先熟悉下activity之间跳转.Activity跳转与传值,主要是通过Intent类来连接多个Activit ...

  10. SQL Server 查询所有外键子父表关系

    SELECT table_name,fk_name,reference_table_name,fk_list_number,fk_detailFROM (SELECT object_name(f.ob ...