拖放事件
拖动某元素,发生以下事件
dragstart
drag
dragend
元素被当道一个有效的目标位置时,会依次发生
dragenter
dragover
dragleave / drop
自定义放置目标
把一个任何元素变成有效的放置目标
1 2 3 4 5 6 7 8 var droptarget=document .getElementById("droptarget" );EventUtil.addHandler(droptarget ,"dragover" ,function (event ) { EventUtil.preventDefault(event); }); EventUtil.addHandler(droptarget ,"dragenter" ,function (event ) { EventUtil.preventDefault(event); });
由于在Firefox中,放置事件的默认行为是打开被放到放置目标的URL,如果是拖放的是一个文本,则会导致无效URL错误,所以为了保证正常,要取消drop事件的默认行为。
1 2 3 EventUtil.addHandler(droptarget ,"drop" ,function (event) { EventUtil.preventDefault(event); });
dataTransfer对象
只有简单的拖放而没有数据变化然并卵,所以在拖放事件的事件处理程序中需要访问dataTransfer对象。
1、dataTransfer的方法
1)setData()
2)getData()
1 2 3 4 5 6 7 event .dataTransfer.setData("text" ,"some text" ); var text=event .dataTransfer.getData("text" ); event .dataTransfer.setData("url" ,"http://www.wrox.com" ); var url=event .dataTransfer.getData("URL" );
在拖动文本是,调用setData()方法,保存在dataTransfer中,在放到目标位置时,通过getData()获取。
为保证firefox的兼容性,最好使用以下方法getData()
1 2 3 var dataTransfer=event .dataTransfer;var url=dataTransfer.getData("url" )||dataTransfer.getData("text/uri-list" );var text=dataTransfer.getData("Text" );
dataTransfer属性
通过dataTransfer的dropEffect和effectAllowed属性,可以确定被拖动的元素以及作为放置目标的元素能够接收什么操作。
dropEffect可以有以下取值
none
move
copy
link,放置目标会打开拖动的元素
dropEffect需要与effectAllowed属性配合才有用,可以有以下取值
uninitialized,没有设置任何放置行为
none
copy
link
move
copyLink
copyMove
linkMove
all
必须在ondragstart中设置effectAllowed属性
可拖动
1 <div draggable="true" >..<div >
【栗子】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > html5拖放1</title > <style type ="text/css" > #div1 ,#div2 {width :488px ;height :250px ;padding :10px ;border :1px solid #aaaaaa ;margin-bottom : 50px } </style > <script type ="text/javascript" > function drop (event) { var data=event.dataTransfer.getData("Text" ); event.target.appendChild(document .getElementById(data)); } function drag (event) { event.dataTransfer.setData("Text" ,event.target.id); } function allowDrop (event) { event.preventDefault(); } </script > </head > <body > <p > 请把图片拖放到矩形中:</p > <div id ="div1" ondrop ="drop(event)" ondragover ="allowDrop(event)" > </div > <img id ="drag1" src ="drag1.jpg" draggable ="true" ondragstart ="drag(event)" width ="336" height ="200" > <div id ="div2" ondrop ="drop(event)" ondragover ="allowDrop(event)" > </div > </body > </html >
[效果如下]