详解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的transition效果和transfor效果示例介绍
Oct 30 HTML / CSS
CSS3实现swap交换动画
Jan 19 HTML / CSS
利用CSS3实现的文字定时向上滚动
Aug 29 HTML / CSS
CSS3中伪元素::before和::after的用法示例
Sep 18 HTML / CSS
浅谈css3新单位vw、vh、vmin、vmax的使用详解
Dec 01 HTML / CSS
HTML5 Canvas锯齿图代码实例
Apr 10 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
Jan 07 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
Aug 04 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
Apr 19 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
Sep 09 HTML / CSS
吃透移动端 1px的具体用法
Dec 16 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
Nov 10 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性能的原理介绍
2012/09/05 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
php compact 通过变量创建数组
2016/11/15 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python列表生成式与生成器操作示例
2018/08/01 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python logging模块原理解析及应用
2020/08/13 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
护理专科毕业推荐信
2013/11/10 职场文书
房地产项目策划书
2014/02/05 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
云台山导游词
2015/02/03 职场文书
工作犯错保证书
2015/05/11 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
党员反邪教心得体会
2016/01/15 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL