可拖动
网页中的图像、链接和文本是浏览器默认可以被拖动的,HTML5 为所有的HTML元素都提供了一个draggable属性,当这个属性的值为true的时候,元素被视为可以拖动。
拖动图像或者链接时,将鼠标放在图像或者链接上,按住鼠标不放就可以拖动它。拖动文本时,要先选中文本,然后可以像拖动图像一样拖动选中的文本。
被拖动的元素事件
拖动图片时依次触发:drapstart,drag,dragend事件。这三个事件的目标都是被拖动的元素。
按下鼠标键并开始移动鼠标时,会在被拖放元素上触发dragstart事件。触发dragstart事件后,随即会触发drag事件,而且在元素被拖动期间会持续触发drag事件;当拖动停止后,无论把元素放到了有效的放置目标还是无效的放置目标上都会触发dragend事件。
放置目标元素事件
当某个元素被拖动到一个有效的放置目标上时,会一次触发:dragenter,dragover,dragleave或drop事件
只要有元素被拖动到放置目标上就会触发dragenter事件,紧随其后的是dragover事件,而且在被拖动的元素还在放置目标的范围内移动时,就会持续触发dragover事件;如果元素被拖出了放置目标就不在触发dragover事件,就会触发dragleave事件。如果元素被放到了放置目标中,就会触发drop事件而不是dragleave事件。这几个事件的目标都是作为放置目标的元素。
谷歌浏览器中支持效果好,火狐效果不好
自定义放置目标
我们可以把任何元素变成有效的放置目标,方法是重写dragenter和dragover事件的默认行为
在FF中,放置事件的默认行为是打开被放到放置目标上的URL。换句话说,如果是把图像拖放
到放置目标上,页面就会转向图像文件;如果是把文本拖放到放置目标上,则会导致无效的URL错误。
因此,为了让FF支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL。
dataTransfer对象
原生拖放当中最大的特性就是可以利用拖放事件传递数据,这样使浏览器原生就可以支持类似于桌面应用的拖放交互功能。要使用数据传输功能就需要一个名为 dataTransfer 的接口。
dataTransfer对象是事件对象的一个属性,它有两个主要方法:getData()和setData()。setData() 用于保存值,getData() 用于获得 setData() 保存的值。
在拖动文本框中的文本时,浏览器会调用setData()方法,将拖动的文本以"text"格式保存在dataTransfer对象中。类似的,在拖放链接或者图像时,会调用setData()方法并保存URL。然后,在这些元素被拖放到放置目标时,就可以通过getData()方法读到这些数据了。
保存的数据类型为"text"或"url",在HTML5中这两种数据类型被映射为"text/plain"和"text/uri-list"
将数据保存为文本和URL是有区别的。如果将数据保存为文本格式,那么数据不会得到任何特殊处理。而如果将数据保存为URL,浏览器会将其当成网页中的链接。换句话说,如果你把它放置到另一个浏览器窗口中,浏览器就会打开该URL。
Demo:
文本拖放:
<!DOCTYPE HTML> <html> <meta charset="utf-8"> <title>HTML5文本拖放</title> <head> <style type="text/css"> #div1 {width:220px;height:185px;padding:10px;border:1px solid #aaaaaa;} </style> </head> <body> <p id="p1">拖动文本到矩形框中:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { //dataTransfer.setData() 方法设置被拖数据的数据类型和值 //这里数据类型是 "Text",值是p标签中的文本 ev.dataTransfer.setData("Text",document.getElementById("p1").innerHTML); } function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.innerHTML=data; } </script> </body> </html>
链接拖放:
<!DOCTYPE HTML> <html> <meta charset="utf-8"> <title>HTML5链接拖放</title> <head> <style type="text/css"> #div1 {width:220px;height:185px;padding:10px;border:1px solid #aaaaaa;} </style> </head> <body> <a href="http://www.baidu.com" id="aa">链接到百度</a> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <script type="text/javascript"> /* ondragover 事件规定在何处放置被拖动的数据。 默认地,无法将数据元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。 */ function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { //dataTransfer.setData() 方法设置被拖数据的数据类型和值 //这里数据类型是 "Text",值是p标签中的文本 ev.dataTransfer.setData("URL",document.getElementById(data).href); } function drop(ev) { //调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开) ev.preventDefault(); //通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。 var data=ev.dataTransfer.getData("URL"); ev.target.innerHTML=data; } </script> </body> </html>
图片拖放:
<!DOCTYPE HTML> <html> <meta charset="utf-8"> <title>HTML5图片拖放</title> <head> <style type="text/css"> #div1 {width:220px;height:185px;padding:10px;border:1px solid #aaaaaa;} </style> </head> <body> <p id="p1">拖动图片到矩形框中:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <img id="drag1" src="/UploadFiles/2021-04-02/abao.png">图片来回拖放:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>图片来回拖放</title> <style type="text/css"> div{width: 230px;height: 185px;padding: 10px;float: left;margin-right: 10px;border: 1px solid#ccc;} </style> </head> <body> <div id="box1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <div id="box2" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <img src="/UploadFiles/2021-04-02/abao.png">dropEffect和effectAllowed属性
利用dataTransfer对象,不光是能够传输数据,还能够通过它来确定被拖动的元素以及作为放置目标的元素能够接收什么操作。这需要访问其两个属性:dropEffect属性和effectAllowed属性。
dropEffect 浏览器会根据不同的值显示不同类型的光标,提升用户放置后的行为。 dropEffect 包括以下几个值:
"none": 不能把拖动的元素放在这里
"move": 应该把拖动的元素移动到放置目标
"copy": 应该把拖动的元素复制到放置目标
"link":表示放置目标会打开拖动的元素 (但拖动的元素必须是一个链接,有URL)
浏览器仅仅会帮你改变光标的类型,但是要实现怎样的效果都是要开发者自己去实现。
dropEffect属性只有搭配effectAllowed属性才有用,effectAllowed属性表示允许拖动元素的哪种dropEffect行为,它的值有以下几种:
"uninitialized":没有给被拖动的元素设置任何放置行为。
"none": 被拖动的元素不能有任何行为
"copy“:只允许值为 “copy” 的放置行为
"link":只允许值为 “link” 的放置行为
"move":只允许值为 “move” 的放置行为
"copyLink": 允许值为 “copy” 和 “link” 的放置行为
"copyMove": 允许值为 “copy” 和 “move” 的放置行为
"linkMove": 允许值为 “link” 和 “move” 的放置行为
"all": 允许所有放置行为
必须在ondragstart事件处理程序中设置effectAllowed属性
Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My-dropEffect and effectAllowed</title> </head> <body> <a href="http://www.baidu.com">链接到百度</a> <div style="width: 200px; height: 100px; float: right; background: red" id="droptarget"></div> <div id="output"></div> <script type="text/javascript" src="/UploadFiles/2021-04-02/EventUtil.js">Demo2:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My-dropEffect and effectAllowed</title> </head> <body> <a href="http://www.baidu.com">链接到百度</a> <p>哈哈哈哈</p> <div style="width: 200px; height: 100px; float: right; background: red" id="droptarget"></div> <div id="output"></div> <script type="text/javascript" src="/UploadFiles/2021-04-02/EventUtil.js">以上这篇浅谈js原生拖放就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]