详解HTML5中的拖放事件(Drag 和 drop)


Posted in HTML / CSS onNovember 14, 2016

浏览器支持

Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

注释:在 Safari 5.1.2 中不支持拖放。

HTML5 拖放实例

<!DOCTYPE html>
<html> 
<head> 
<style type="text/css"> 
#div1 {width:488px;height:70px;padding:10px;border:1px solid #aaaaaa;} 
</style> 
<script type="text/javascript"> 
function allowDrop(ev) 
{ 
ev.preventDefault(); 
} 
 
function drag(ev) 
{ 
ev.dataTransfer.setData("Text",ev.target.id); 
} 
 
function drop(ev) 
{ 
ev.preventDefault(); 
var data=ev.dataTransfer.getData("Text"); 
ev.target.appendChild(document.getElementById(data)); 
} 
</script> 
</head> 
<body> 
 
<p>请把 Aseoe logo的图片拖放到矩形中:p> 
 
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">div> 
<br /> 
<img id="drag1" src="http://www.aseoe.com/statics/images/eoe/logo.png" 
draggable="true" ondragstart="drag(event)" /> 
 
</body> 
</html>

设置元素为可拖放

首先,为了使元素可拖动,把 draggable 属性设置为 true :

拖动什么 - ondragstart 和 setData()

然后,规定当元素被拖动时,会发生什么。

在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

dataTransfer.setData() 方法设置被拖数据的数据类型和值:

function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}

在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。

放到何处 - ondragover

ondragover 事件规定在何处放置被拖动的数据。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:

event.preventDefault()

进行放置 - ondrop

当放置被拖数据时,会发生 drop 事件。

在上面的例子中,ondrop 属性调用了一个函数,drop(event):

function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}

代码解释:

调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)

通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。

被拖数据是被拖元素的 id ("drag1")

把被拖元素追加到放置元素(目标元素)中

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位学习或者使用HTML5能有所帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

HTML / CSS 相关文章推荐
CSS3教程(1):什么是CSS3
Apr 02 HTML / CSS
css3强大的动画效果animate使用说明及浏览器兼容介绍
Jan 09 HTML / CSS
一款纯css3实现的响应式导航
Oct 31 HTML / CSS
CSS3区域模块region相关编写示例
Aug 28 HTML / CSS
利用CSS3实现折角效果实例源码
Sep 28 HTML / CSS
css3动画 小球滚动 js控制动画暂停
Nov 29 HTML / CSS
HTML5验证以及日期显示的实现详解
Jul 05 HTML / CSS
深入探究HTML5的History API
Jul 09 HTML / CSS
HTML5自定义视频播放器源码
Jan 06 HTML / CSS
使用CSS实现小三角边框原理解析
Nov 07 HTML / CSS
HTML怎么设置下划线?html文字加下划线方法
Dec 06 HTML / CSS
css3 文字断裂效果
Apr 22 HTML / CSS
HTML5不支持frameset的两种解决方法
Nov 14 #HTML / CSS
html5 视频播放解决方案
Nov 06 #HTML / CSS
HTML5头部标签的一些常用信息小结
Oct 23 #HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
Oct 23 #HTML / CSS
HTML5页面音视频在微信和app下自动播放的实现方法
Oct 20 #HTML / CSS
浅谈html5标签css3的常用样式
Oct 20 #HTML / CSS
html5中的一些标签学习(心得)
Oct 18 #HTML / CSS
You might like
PHP 快速排序算法详解
2014/11/10 PHP
PHP里的单例类写法实例
2015/06/25 PHP
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python tkinter界面居中显示的方法
2018/10/11 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
初级Java程序员面试题
2016/03/03 面试题
保险公司早会主持词
2014/03/22 职场文书
小学生毕业评语
2014/12/26 职场文书
投资意向协议书
2015/01/29 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
个人收入证明范本
2015/06/12 职场文书
珍爱生命主题班会
2015/08/13 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS