1、设置元素可拖拽属性:draggable

  • true表示可拖拽。
  • false表示不可拖拽。
  • auto默认值,img和带href属性的a标签则表示可拖拽,其他标签表示不可被拖拽。
  • 其他值表示不可拖拽。
  • 兼容FF:需要在ondragstart事件中设置ev.dataTransfer.setData("",""),元素才可以被拖拽。

2、拖拽元素事件:

  • dragstart:拖拽前触发,即鼠标按下,被拖拽元素被拖拽的瞬间触发。

    • event.dataTransfer的大部分设置均在这里配置
    • 若调用event.preventDefault()则会阻止拖拽行为,导致后续的拖拽事件不被触发
    • 触发dragstart事件后,其他元素的mousemove,mouseover,mouseenter,mouseleave,mouseout事件均不会被触发了
  • drag:拖拽前、拖拽结束之间连续触发,即使鼠标没有移动,只要未释放,都会触发。
  • dragend:拖拽结束触发,即释放鼠标触发。

3、目标元素事件:

  • dragenter:进入目标元素触发,相当于mouseover
  • dragover:被拖拽元素在目标元素上移动时触发,相当于mousemove
    • 可以在这里设置dropEffect的值,事件的默认行为是将dropEffect设置为none
    • 该事件是被拖拽元素在目标元素上移动一段时间后才触发
    • 事件的默认行为是不允许被拖拽元素在其他元素上释放或放置(即无法触发 drop 事件),需要通过 event.preventDefault() 来阻止默认行为才能触发后续的 drop 事件。
  • dragleave:被拖拽元素离开目标元素时触发
  • drop:被拖拽元素放置在目标元素上时触发(释放鼠标)
    • 对于外来的被拖拽元素(超链接、文件、图片源), drop 事件的默认行为是浏览器将当前页面重定向到被拖拽元素所指向的资源上
    • 对文档内部的被拖拽元素,IE10+和Chrome下的默认行为是不作为,而FF得默认行为是新打开一个文档用于访问被拖拽元素所指向的资源

4、事件执行顺序:

  • drop不触发的时候:dragstart  >  drag >  dragenter >  dragover >  dragleave > dragend
  • drop触发的时候(dragover阻止了默认事件):dragstart  >  drag >  dragenter >  dragover >  drop > dragend

5、dataTransfer对象:

  • [object DragEvent]对象:继承自[object MouseEvent]对象,其实就多了一个dataTransfer属性。
  • [object DataTransfer]对象详解:传递数据,数据类型为字符串和文件类型。
  • effectAllowed和dropEffect属性。(http://www.cnblogs.com/fsjohnhuang/p/3961066.html#t8)

6、其他属性:

  • items:数据类型为DataTransferItemList,存储DataTransfer对象中所有的数据项。
  • files:数据类型为FileList(IE5~9没有该属性)。
  • types:数据类型为DOMStringList,存储DataTransfer对象中所有数据项的数据类型。

7、方法:

  • addElement():添加一起跟随鼠标移动的元素。仅在 dragstart 事件中调用。
  • setDragImage(image,x,y):设置拖动时跟随鼠标移动的图片,用来替代默认的元素,若image不是图片元素则会元素临时转换为图片;x用于设置图标与鼠标在水平方向上的距离,y设置图标与鼠标在垂直方向上的距离。仅在 dragstart 事件中调用。IE10+不支持该方法;

示例:

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>模拟回收站</title>
<style type="text/css">
li{
list-style: none;width:100px; height:25px; line-height: 25px; background:#ccc; margin:5px; text-align: center;
}
#recycle{
width:200px; height:100px; background:red; position: absolute; top:200px;
}
</style>
</head>
<body>
<ul id="list">
<li draggable="true">图标1</li>
<li draggable="true">图标2</li>
<li draggable="true">图标3</li>
</ul>
<div id="recycle"></div>
</body>
</html>
<script>
window.onload = function(){
var oList = document.getElementById("list");
var aLi = oList.getElementsByTagName("li");
var oRecycle = document.getElementById("recycle"); var flag = false; //标示是否把图标放入到回收站
for(var i = 0 ; i<aLi.length;i++){
aLi[i].index = i;
aLi[i].ondragstart = function(ev){
ev = ev || window.event;
ev.dataTransfer.setData("index",this.index); ev.dataTransfer.setDragImage(getImg(),0,0);
}
aLi[i].ondragend = function(ev){
flag && oList.removeChild(this);
}
} oRecycle.ondragover = function(ev){
ev.preventDefault();
}
oRecycle.ondrop = function(ev){
var index = ev.dataTransfer.getData("index");
this.appendChild(getLiByIndex(index));
flag = true;
} function getImg(){
var oImg = document.createElement("img");
oImg.src = "img/111.png";
return oImg;
} function getLiByIndex(index){
for(var i = 0 ;i < aLi.length;i++){
if(aLi[i].index == index) return aLi[i];
}
}
}
</script>

模拟回收站

 尊重原创:http://www.cnblogs.com/fsjohnhuang/p/3961066.html

html5 拖放事件的更多相关文章

  1. HTML5拖放事件(Drag-and-Drop,DnD)

    拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是在“拖放源(drag source)”和“拖放目标(drop target ...

  2. HTML5拖放事件-上传图片预览功能

    主要用到的知识点有dataTransfer对象和FileReader(读取文件信息) 1.创建简单的HTML标签: <body> <div id="box"> ...

  3. HTML5拖放(drag and drop)与plupload的懒人上传

    HTML5拖放能够将本地的文件拖放到页面上,plupload又是很好的文件上传插件,而今天就将两者结合,做了个文件拖拽上传的功能. 简述HTML5拖放 拖放是HTML5标准的一部分,任何元素都能够拖放 ...

  4. HTML5 拖放

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 I ...

  5. HTML5 拖放(Drag 和 Drop)

    拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. <!DOCTYPE HTML> <html> <hea ...

  6. HTML5拖放API

    拖放事件事件提供了拖放可以控制几乎所有方面的拖放操作.棘手的部分是确定每个事件触发:在拖项目火:别人火下降的目标.拖动项时,以下事件(按照这个顺序): 拖曳开始拖dragend此刻你把鼠标按钮和开始移 ...

  7. HTML5 拖放(Drag 和 Drop)功能开发——基础实战

    随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的 ...

  8. 【Demo】HTML5拖放--简单demo

    用HTML5拖放功能编写一个简单的拖放Demo 单次拖放demo 效果: ------拖放前------- ------拖放后-------  实现代码: <!DOCTYPE html> ...

  9. HTML5: HTML5 拖放

    ylbtech-HTML5: HTML5 拖放 1.返回顶部 1. HTML5 拖放(Drag 和 Drop) 拖放(Drag 和 drop)是 HTML5 标准的组成部分.   将 RUNOOB.C ...

随机推荐

  1. Codeforces_733C

    C. Epidemic in Monstropolis time limit per test 1 second memory limit per test 256 megabytes input s ...

  2. todey

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> 框架集fromset ...

  3. java基本类型和包装类型的区别以及object的公共方法

    Java的类型分为两部分,一个是基本类型(primitive),如int.double等八种基本数据类型: 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节 ...

  4. Java基础之构造方法及其应用

    构造方法是一种特殊的方法,它是一个与类同名且无返回值类型(连void也不能有)的方法. 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化. 当类实例化一个对象时会自动调用构造方法.构造方 ...

  5. 【ACM】nyoj_106_背包问题_201308152026

    背包问题时间限制:3000 ms  |  内存限制:65535 KB 难度:3描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10 ...

  6. ASP.NET MVC 源码分析(一)

    ASP.NET MVC 源码分析(一) 直接上图: 我们先来看Core的设计: 从项目结构来看,asp.net.mvc.core有以下目录: ActionConstraints:action限制相关 ...

  7. Spring MVC 入门(一)

    什么是 Spring MVC 学习某一样东西之前,我们一定要大致知道这个东西是什么,能干什么,为什么要用它. Spring MVC 是一个开源平台,一个基于 Spring 的 MVC 框架,它支持基于 ...

  8. asciiflow

    http://asciiflow.com/ https://maxiang.io/# http://www.jianshu.com/p/19432b5e3c60

  9. Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  10. 【翻译自mos文章】在12c数据库中,哪种audit trail 受到支持?

    在12c数据库中,哪种audit trail 受到支持? 来源于:What Audit Trail Types Are Supported For A 12c Database? (文档 ID 198 ...