详解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中文字镂空、透明值、阴影效果设置示例小结
Mar 07 HTML / CSS
Web前端绘制0.5像素的几种方法
Aug 11 HTML / CSS
使用css3实现超炫的loading加载动画效果
May 07 HTML / CSS
CSS实现限制字数功能当对象内文本溢出时显示省略标记
Aug 20 HTML / CSS
分享CSS3制作卡片式图片的方法
Jul 08 HTML / CSS
浅谈css3中的前缀
Jul 20 HTML / CSS
HTML5新增的标签和属性归纳总结
May 02 HTML / CSS
HTML5中如何显示视频呢 HTML5视频播放demo
Jun 08 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
Aug 07 HTML / CSS
html5唤起app的方法
Nov 30 HTML / CSS
recorder.js 基于Html5录音功能的实现
May 26 HTML / CSS
AmazeUI 模态窗口的实现代码
Aug 18 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
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python运行其他程序的实现方法
2017/07/14 Python
用Python实现读写锁的示例代码
2018/11/05 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python打开音乐文件的实例方法
2020/07/21 Python
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
中英文求职信范文
2015/03/19 职场文书
生活小常识广播稿
2015/08/19 职场文书