详解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 相关文章推荐
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
Apr 03 HTML / CSS
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
Sep 02 HTML / CSS
一款纯css3实现的tab选项卡的实列教程
Dec 11 HTML / CSS
css3实现的多级渐变下拉菜单导航效果代码
Aug 31 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
Aug 16 HTML / CSS
利用CSS3实现折角效果实例源码
Sep 28 HTML / CSS
css3实现元素环绕中心点布局的方法示例
Jan 15 HTML / CSS
基于html5实现的图片墙效果
Oct 16 HTML / CSS
使用HTML5进行SVG矢量图形绘制的入门教程
Feb 19 HTML / CSS
解析HTML5中的新功能本地存储localStorage
Mar 01 HTML / CSS
HTML5 Canvas 旋转风车绘制
Aug 18 HTML / CSS
HTML怎么设置下划线?html文字加下划线方法
Dec 06 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
PHP5 安装方法
2006/10/09 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
javascript基本语法分析说明
2008/06/15 Javascript
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
浅谈node中的cluster集群
2018/06/02 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python的mysqldb安装步骤详解
2017/08/14 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
给同事的道歉信
2014/01/11 职场文书
优秀员工表扬信
2014/01/17 职场文书
财产公证书格式
2014/04/10 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
学期个人自我总结
2015/02/13 职场文书
如何使用pdb进行Python调试
2021/06/30 Python