html5 拖放事件

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+不支持该方法;

示例:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>模拟回收站</title>
 6         <style type="text/css">
 7             li{
 8                 list-style: none;width:100px; height:25px; line-height: 25px; background:#ccc; margin:5px; text-align: center;
 9             }
10             #recycle{
11                 width:200px; height:100px; background:red; position: absolute; top:200px;
12             }
13         </style>
14     </head>
15     <body>
16         <ul id="list">
17             <li draggable="true">图标1</li>
18             <li draggable="true">图标2</li>
19             <li draggable="true">图标3</li>
20         </ul>
21         <div id="recycle"></div>
22     </body>
23 </html>
24 <script>
25     window.onload = function(){
26         var oList = document.getElementById("list");
27         var aLi = oList.getElementsByTagName("li");
28         var oRecycle = document.getElementById("recycle");
29
30         var flag = false; //标示是否把图标放入到回收站
31         for(var i = 0 ; i<aLi.length;i++){
32             aLi[i].index = i;
33             aLi[i].ondragstart = function(ev){
34                 ev = ev || window.event;
35                 ev.dataTransfer.setData("index",this.index);
36
37                 ev.dataTransfer.setDragImage(getImg(),0,0);
38             }
39             aLi[i].ondragend = function(ev){
40                 flag && oList.removeChild(this);
41             }
42         }
43
44         oRecycle.ondragover = function(ev){
45             ev.preventDefault();
46         }
47         oRecycle.ondrop = function(ev){
48             var index =  ev.dataTransfer.getData("index");
49             this.appendChild(getLiByIndex(index));
50             flag = true;
51         }
52
53         function getImg(){
54             var oImg = document.createElement("img");
55             oImg.src = "img/111.png";
56             return oImg;
57         }
58
59         function getLiByIndex(index){
60             for(var i = 0 ;i < aLi.length;i++){
61                 if(aLi[i].index == index) return aLi[i];
62             }
63         }
64     }
65 </script>

模拟回收站

时间: 2024-10-11 01:07:04

html5 拖放事件的相关文章

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

拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是在“拖放源(drag source)”和“拖放目标(drop target)”之间传输数据的用户界面.下面例子将演示如何创建自定义拖放源和自定义拖放目标,前者传输数据而不是其文本内容,后者以某种方式相应拖放数据而不是仅显示它. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 注释:在

HTML5拖放事件-上传图片预览功能(学习笔记)

主要用到的知识点有dataTransfer对象和FileReader(读取文件信息) 1.创建简单的HTML标签: <body> <div id="box">请将图片拖拽至此</div> <ul></ul> </body> 2.给标签加上简单的样式: <style type="text/css"> div{ width: 300px; height: 300px; margin:10

Html5之高级-11 拖放API (拖放事件、dataTransfer对象、setDragImage方法)

一.拖放API WEB 拖放 - 在桌面应用程序上,可以将元素从一个位置拖放到另一个位置,但在Web上,开发者没有一种能够实现这种操作的标准技术,从而在Web上去实现这个功能并不太容易 - 在 HTML5 标准中引入了拖放API,从而使我们有可能开发出于桌面应用程序完全相同的 Web应用程序 源元素事件 - 在拖放 API 中引入了一些新的事件,其中有一些元素是由源元素(拖动的元素)触发,称之为源元素事件,另一些事件由目标元素触发(源元素投放的元素) - 源元素事件: - dragstart:当

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

随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的功能.在生活中,拖放物品其实是相当常见的一个动作.标榜“互联网生活尖凿狮”的程序猿也在一直试图用鼠标模拟出“手”的操作,用来给用户以更好的体验,你可以抓住一个对象,并且拖动到你想放置的区域.很多javascript都类似实现了相关的功能,例如,jQueryUI的draganddrop组件,比如<JS

HTML5——拖放

HTML5拖放 1.HTML5拖放 拖放(Drag和drop)是HTML5标准的组成部分. 2.拖动开始: ondragstart:调用了一个函数,drag(event),它规定了被拖动的数据 3.设置拖动数据 setData():设置被拖数据的数据类型和值. 4.放入位置: ondragover:事件规定在何处放置被拖动的数据. 5.放置: ondrop:当放置被拖放数据时,会发生drop事件 总结: 在拖动目标上触发事件(源元素): ondragstart:用户开始拖动元素时触发 ondra

html5 拖放---(二)转

draggable是一个枚举属性,用于指定一个标签是否可以被拖拽.有以下四种取值: true 表示此元素可拖拽 false 表示此元素不可拖拽 auto 除img和带href的标签a标签表示可拖拽外,其它标签均表示不可拖拽 其它任何值 表示不可拖拽 事件: [被拖拽元素] ondragstart 拖拽前触发(鼠标按下并开始拖拽) ondrag            拖拽过程中触发(连续出发,即使鼠标不移动也会连续触发) ondragend      拖拽结束触发 [目标元素] ondragent

原生拖拽,拖放事件(drag and drop)

原生拖拽,拖放事件(drag and drop) 拖拽,拖放事件可以通过拖拽实现数据传递,达到良好的交互效果,如:从操作系统拖拽文件实现文件选择,拖拽实现元素布局的修改. drag and drop事件流程 一个完整的drag and drop流程通常包含以下几个步骤: 设置可拖拽目标.设置属性draggable="true"实现元素的可拖拽. 监听dragstart设置拖拽数据 为拖拽操作设置反馈图标(可选) 设置允许的拖放效果,如copy,move,link 设置拖放目标,默认情况

H5的拖放事件(拖拽删除)

今天我们来介绍一下h5的拖放事件: 拖放事件 H5的拖放事件提供了多个接口: 1.drag:当元素或者选中的文本被拖动时触发(每几百毫秒触发一次),应用在被拖拽元素上 2.dragend:当拖动操作结束时触发(通过释放鼠标按钮或者点击转义键),应用在被拖拽元素上 3.dragenter:当一个被拖动的元素或者选中的文本进入一个有效的放置目标时触发,应用在目标元素上 4.dragexit:当元素不再是拖动操作的直接选择元素时触发(很少使用) 5.dragleave:当拖动元素或者选中的文本离开有效

Android事件详解——拖放事件DragEvent

1.Android拖放框架的作用? 利用Android的拖放框架,可以让用户用拖放手势把一个View中的数据移到当前layout内的另一个View中去. 2.拖放框架的内容? 1)拖放事件类 2)拖放监听器 3)其他辅助的方法和类 3.拖放过程? 拖放过程有四个基本步骤: 1)启动 为了响应用户开始拖动的手势,需要调用View的startDrag方法来通知系统.startDrag方法的参数需要指定所拖动的数据.元数据和绘制拖动阴影的回调方法. 作为响应,系统首先通过回调来获取拖动阴影,然后在设备