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. Html test

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  2. vsftpd:500OOPS:vsftpd:refusingtorunwithwritablerootinsidechroot()错误的解决方法

    当我们限定了用户不能跳出其主目录之后,使用该用户登录FTP时往往会遇到这个错误: 500 OOPS: vsftpd: refusing to run with writable root inside ...

  3. 换个语言学一下 Golang (4)——变量与常量

    一.变量定义 所谓的变量就是一个拥有指定名称和类型的数据存储位置. //看一个例子 package main import ( "fmt" ) func main() { var ...

  4. 手把手从python安装到setuptools、pip工具安装

    一.python安装1.基础开发库 apt-get install gccapt-get install openssl libssl-dev 2.安装数据库和开发库 apt-get install ...

  5. 【XSY3413】Lambda - 造计算机初步——邱奇-图灵论题与lambda演算

    题意: 关于邱奇-图灵论题的一点思考 这道题起源于计算机科学史上一个非常著名的问题——邱奇-图灵论题,这个论题是可计算性理论的基石,关于它的思考与证明几乎贯穿了整个计算机科学史,涵盖了数学.算法理论. ...

  6. 通过javascript在iframe中加载html

    在spring mvc中,虽然有时候,在控制器中设置返回值是json对象,但在拦截器出现错误的时候,仍然可能返回html(根据设置的不同),如果要展示这些html,最好把他们放入iframe中,以防这 ...

  7. SSH免密登录的错误

    为了避免每次在测试环境启动hadoop都需要输入密码, 使用免密操作 ssh-keygen,然后一直按enter键 接着需要输入root密码, 输入root密码后一直报错,密码不正确, permiss ...

  8. 第三节:初识pandas之DataFrame(上)

    DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.

  9. sql server的 between and 日期问题

  10. bupt summer training for 16 #8 ——字符串处理

    https://vjudge.net/contest/175596#overview A.设第i次出现的位置左右端点分别为Li,Ri 初始化L0 = 0,则有ans = sum{ (L[i] - L[ ...