时间:2021-05-18
可拖动
网页中的图像、链接和文本是浏览器默认可以被拖动的,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>链接拖放:
以上这篇浅谈js原生拖放就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了浅谈原生JS实现jQuery的animate()动画示例,希望此文章对各位有所帮助。参数介绍:obj执行动画的元素cssJSON数值对,形式为“{属性
这段时间一直在给QZone研究Js拖放的问题。今天突然发现live.com的模块拖放居然可以跨出浏览器。到底是什么方法让mousemove和mouseup事件可
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢?最近都在做原生JS熟悉的练习。。。用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还
DCloud的Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术Native.js虽然强大和开放
浅谈js图片前端预览之filereader和window.URL.createObjectURL//previewimg:filereader方式documen