html5 drap & drop
小知识点记录一下:onselectstart,onselect
1.onselectstart
该js方法是用来控制盒中内容是否被允许选中
<head> <style> #tmp { height: 200px; background-color: red; } </style> </head> <body> <div id="tmp"> 测试测试 </div> <input type="text" id="input1"> </body> <script> document.getElementById("tmp").onselectstart = function() { return true; }; document.getElementById("input1").onselect = function() { return false; }; </script>
onselectstart,当鼠标mousedown 就开始触发。 return false 表示不允许选中。
2.onselect
在input中的内容被选中后触发
drag&drop
如何启用DnD效果
<div id="drag" draggable="true" style="width:100px;height:50px;background-color:red;"> test </div>
var drag = document.getElementById('drag'); drag.onselectstart = function(){return false;}; // FF下拖拽时,默认不会生成一个被拖拽元素的阴影并跟随鼠标移动 // 需通过e.dataTransfer.setData来启动该效果 drag.ondragstart = function(e){ e.dataTransfer.setData('text', e.target.innerHTML); };
关键点:
1.为触发拖拽的元素添加 draggable="true" 特性,用于启动HTML5的DnD功能(即元素的 dragstart 事件可被触发)
2.在FF下即使添加 draggable="true" 特性,但仅仅会触发 dragstart 事件,但DnD功能并没有被完全打开(拖拽元素时没有任何视觉效果),需要调用 event.dataTransfer.setData('Text','') 彻底开启DnD功能。
draggable属性详解
作用:用于指定标签是否可被拖拽
属性值范围如下:
1. true ,表示可被拖拽
2. false ,表示不可被拖拽
3. auto ,默认值,img和带href属性的a标签则表示可拖拽,其他标签表示不可被拖拽
4. 其他值,表示不可被拖拽
DnD生命周期
1. 被拖拽元素的生命周期
dragstart :当被拖拽元素开始被拖拽时触发
[a]. event.dataTransfer的大部分设置均在这里配置
[b]. 若调用event.preventDefault()则会阻止拖拽行为,导致后续的拖拽事件不被触发
[c]. 触发dragstart事件后,其他元素的mousemove,mouseover,mouseenter,mouseleave,mouseout事件均不会被触发了
drag :当被拖拽元素被拖拽时触发
dragend :当拖拽行为结束后触发
2. 目标元素的生命周期
dragenter :当被拖拽元素进入目标元素时触发
dragover :当被拖拽元素在目标元素上移动时触发
注意:
[a]. 可以在这里设置dropEffect的值,事件的默认行为是将dropEffect设置为none
[b]. 该事件是被拖拽元素在目标元素上移动一段时间后才触发
[c].事件的默认行为是不允许被拖拽元素在其他元素上释放或放置(即无法触发[drop] 事件需要通过event.preventDefault())来阻止默认行为才能触发后续的drop事件
drop:当被拖拽元素在目标元素上,而且释放鼠标左键时触发
注意:
[a]. 对于外来的被拖拽元素(超链接、文件、图片源), drop 事件的默认行为是浏览器将当前页面重定向到被拖拽元素所指向的资源上
[b]. 对文档内部的被拖拽元素,IE10+和Chrome下的默认行为是不作为,而FF得默认行为是新打开一个文档用于访问被拖拽元素所指向的资源
整体生命周期
dragstart -> drag -> dragenter -> dragover -> dragleave -> drop -> dragend
DnD中最重要的数据传递对象──DataTransfer对象
1. effectAllowed
作用:用于设置被拖拽元素可执行的操作。
取值范围:
copy ,限定dropEffect的属性值为copy,否则会鼠标指针为禁止样式
link ,限定dropEffect的属性值为link,否则会鼠标指针为禁止样式
move ,限定dropEffect的属性值为move,否则会鼠标指针为禁止样式
copyLink ,限定dropEffect的属性值为copy和link,否则会鼠标指针为禁止样式
copyMove ,限定dropEffect的属性值为copy和move,否则会鼠标指针为禁止样式
linkMove ,限定dropEffect的属性值为link和move,否则会鼠标指针为禁止
all ,允许dropEffect的属性值为任意值
none ,鼠标指针一直为禁止样式,不管dropEffect的属性值是什么
uninitialized ,没有限定dropEffect属性的值,效果和 all 一样。
注意:仅能在 dragstart 事件中设置该属性,其他事件中设置均无效
【b】.dropEffect
作用:用于设置目标元素将执行的操作,若属性值属于 effectAllowed 范围内,则鼠标指针将显示对应的指针样式,否则则显示禁止的指针样式。
取值范围:
copy :被拖拽元素将被复制到目标元素内,若属于 effectAllowed 范围内时,则鼠标指针显示复制的样式,否则则显示禁止的指针样式。
link :被拖拽元素将以超链接的形式打开资源,若属于 effectAllowed 范围内时,则鼠标指针显示超链接的样式,否则则显示禁止的指针样式。
move :被拖拽元素将被移动到目标元素内,若属于 effectAllowed 范围内时,则鼠标指针显示移动的样式,否则则显示禁止的指针样式。
none :被拖拽元素不能在目标元素上作任何操作,一直显示禁止的指针样式。除了文本框外其他元素的默认值均为none
注意:
1. 仅能在 dragover 事件中设置该属性值,其他事件中设置均无效
2. 当显示禁止的指针样式时,将无法触发目标元素的 drop 事件。
方法:
void addElement({HTMLElement} element
添加一起跟随鼠标移动的元素。仅在 dragstart 事件中调用,Chrome37和IE10+不支持该方法;
void setDragImage({Element} image, {long} x, {long} y)
设置拖动时跟随鼠标移动的图片,用来替代默认的元素,若image不是图片元素则会元素临时转换为图片;x用于设置图标与鼠标在水平方向上的距离,y设置图标与鼠标在垂直方向上的距离。仅在 dragstart 事件中调用。IE10+不支持该方法;