详解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 相关文章推荐
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
Feb 04 HTML / CSS
纯CSS3大转盘抽奖示例代码(响应式、可配置)
Jan 13 HTML / CSS
css3边框_动力节点Java学院整理
Jul 11 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
Aug 14 HTML / CSS
css3 仿写阿里云水纹效果的示例代码
Feb 10 HTML / CSS
canvas基础之图形验证码的示例
Jan 02 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
Jul 19 HTML / CSS
html5教程实现Photoshop渐变色效果
Dec 04 HTML / CSS
HTML5通用接口详解
Jun 12 HTML / CSS
详解Canvas实用库Fabric.js使用手册
Jan 07 HTML / CSS
HTML5如何使用SVG的方法示例
Jan 11 HTML / CSS
Html5踩坑记之mandMobile使用小记
Apr 02 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图片上传存储源码并且可以预览
2011/08/26 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
深入理解Python3中的http.client模块
2017/03/29 Python
多个应用共存的Django配置方法
2018/05/30 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
Python logging模块原理解析及应用
2020/08/13 Python
python给list排序的简单方法
2020/12/10 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
银行进社区活动总结
2014/07/07 职场文书
三峡导游词
2015/01/31 职场文书
中班上学期个人总结
2015/02/12 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
OpenFeign实现远程调用
2022/08/14 Java/Android