详解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实现垂直下拉动画菜单示例
Apr 22 HTML / CSS
利用纯css3实现的文字亮光特效的代码演示
Nov 27 HTML / CSS
纯CSS3代码实现文字描边
Apr 25 HTML / CSS
几个CSS3的flex弹性盒模型布局的简单例子演示
May 12 HTML / CSS
利用CSS3伪元素实现逐渐发光的方格边框
May 07 HTML / CSS
CSS3 清除浮动的方法示例
Jun 01 HTML / CSS
html5中地理位置定位api接口开发应用小结
Jan 04 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
Apr 10 HTML / CSS
html5中的input新属性range使用记录
Sep 05 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
Jun 27 HTML / CSS
使用canvas实现雪花飘动效果的示例代码
Mar 30 HTML / CSS
CSS 伪元素::marker详解
Jun 26 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生成静态页面详解
2006/12/05 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
Json解析的方法小结
2016/06/22 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python常用列表数据结构小结
2014/08/06 Python
python学习 流程控制语句详解
2016/06/01 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
python中字符串内置函数的用法总结
2018/09/13 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
Java基础知识面试题
2014/03/25 面试题
在校大学生自我评价范文
2014/09/12 职场文书
手机被没收的检讨书
2014/10/04 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
校本课程教学计划
2015/01/19 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书