HTML 学习笔记 (drag & drop)
拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。过去,我们用监听鼠标的Mousedown、Mouseove、Mouseup等事件来不停地获取鼠标的坐标来修改元素的位置,而现在html5原生的Drag &Drop事件(DnD),方便了许多,而且性能也有了提高。
如何使对象能够被拖动
为了使元素能够被拖动 需把要拖动元素的draggable 属性设置为true。
<img src="../img/0.jpg" draggable="true" id="image"/>
注意:在大多数浏览器中,a元素和img元素默认就是可以拖放的,但是为了保险起见,最好还是加上draggable属性。
拖动时触发的事件
dragstart:网页元素开始拖动时触发
drag:被拖动的元素在拖动过程中持续触发
dragenter:被拖动的元素进入目标元素时触发。应该在目标元素监听此事件。
dragleave:别拖动的元素离开目标元素时触发,应该在目标元素中监听该方法。
dragover:被拖动的元素停留在目标元素中时持续触发,应该在目标元素中监听该方法。
drap:被拖动元素或从文件系统选中的文件,拖放落下时触发。
dragend:网页元素拖动结束时触发。
注意:以上这些事件都可以指定回调函数。
dataTransfer 对象
拖动过程中,回调函数接受的事件参数,有一个dataTransfer属性。它指向一个对象,包含了与拖动相关的各种信息。
event.dataTransfer.setData(biaozhi,event.target.id);
draggableElement.addEventListener('dragstart', function(event) {
event.dataTransfer.setData('text', 'Helloweba');
});
上面代码在拖动开始时,在dataTransfer对象上储存一条文本信息,内容为“Helloweba”。当拖放结束时,可以用getData方法取出这条信息。
dataTransfer对象的属性:
effectAllowed:指定所允许的操作,可能的值为copy、move、link、copyLink、copyMove、linkMove、all、none和uninitialized(默认值,等同于all,即允许一切操作)。
files:包含一个FileList对象,表示拖放所涉及的文件,主要用于处理从文件系统拖入浏览器的文件。
types:储存在DataTransfer对象的数据的类型。
dataTransfer对象的方法:
setData(format, data):在dataTransfer对象上储存数据。第一个参数format用来指定储存的数据类型,比如text、url、text/html等
getData(format):从dataTransfer对象取出数据。
clearData(format):清除dataTransfer对象所储存的数据。如果指定了format参数,则只清除该格式的数据,否则清除所有数据。
setDragImage(imgElement, x, y):指定拖动过程中显示的图像。默认情况下,许多浏览器显示一个被拖动元素的半透明版本。参数imgElement必须是一个图像元素,而不是指向图像的路径,参数x和y表示图像相对于鼠标的位置。
dataTransfer对象允许在其上存储数据,这使得在被拖动元素与目标元素之间传送信息成为可能。
实例代码 在两个div之间拖动元素
实现拖放的过程
1.设置元素可拖放,即把draggable属性设置为true
2.拖动什么 ondragstart 和 setData()
image.ondragstart = function(event) {
event.dataTransfer.setData(biaozhi,event.target.id);
}
image为可拖动的元素
3.放到何处-ondargover (ondragover事件规定在何处放置被拖动的数据。默认地无法将数据/元素放置到其他元素中。如果要允许放置,必须阻止默认的处理方式。这里通过调用ondragover事件的event.preventDefault()方法:)
box1Div.ondragover = function(event) {
event.preventDefault();
}
4.进行放置
当放置被拖拽数据时会发生drop事件,例:
function dropeImage(event) {
event.preventDefault();
//从dataTransfer中取出包装好的数据 放在目标元素中
var data = event.dataTransfer.getData(biaozhi);
event.target.appendChild(document.getElementById(data));
}
完整例子(元素在两个div之间进行拖放)
HTML 代码
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="../js/drapAnddrop.js"></script>
<style type="text/css">
.box {
width: 400px;
height: 400px;
border: 1px solid orange;
}
#box1 {
background: darkgray;
}
</style>
</head>
<body>
<div id="box1" class="box"></div>
<div id="box2" class="box">
<img src="../img/0.jpg" draggable="true" id="image"/>
</div> </body>
</html>
Js代码
var box1Div;
var box2Div ,image;
var biaozhi = "text";
window.onload = function() {
box1Div = document.getElementById("box1");
box2Div = document.getElementById("box2");
image = document.getElementById("image");
//设置数据格式,就是包装要传递的数据在dataTransfer中
image.ondragstart = function(event) {
event.dataTransfer.setData(biaozhi,event.target.id);
} //放置结束
box1Div.ondragover = function(event) {
event.preventDefault();
}
box2Div.ondragover = function (event) {
event.preventDefault();
}
//进行放置
box1Div.ondrop = dropeImage;
box2Div.ondrop = dropeImage; }
function dropeImage(event) {
event.preventDefault();
//从dataTransfer中取出包装好的数据 放在目标元素中
var data = event.dataTransfer.getData(biaozhi);
event.target.appendChild(document.getElementById(data));
}
下面一段代码 是拖放本地文件进入网页中(本例子是拖放桌面上的一张图片进入网页元素)
HTML 代码
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#imageContainer {
width: 500px;
height: 500px;
background: darkgray;
}
</style>
<script src="../js/locationDrap.js"></script>
</head>
<body>
<div id="imageContainer"></div>
<div id="msgId"> </div>
</body>
</html>
Js 代码
var imageContainer;
window.onload = function () {
imageContainer = document.getElementById("imageContainer"); imageContainer.ondragover = function(event) {
event.preventDefault();
} imageContainer.ondrop = function(event) {
event.preventDefault();
// shouObj(event.dataTransfer.files);
var f = event.dataTransfer.files[0];
var fileReader = new FileReader();
fileReader.onload = function(event) {
// shouObj(event.target);
imageContainer.innerHTML = "<img src=\"" + fileReader.result +"\" />"
}
fileReader.readAsDataURL(f);
}
} function shouObj(obj) {
var s = "";
for (var k in obj) {
s += k + ":" + obj[k] + "<br />";
}
document.getElementById("msgId").innerHTML = s;
}
其中fileReader.result 就是经过加密的图片文件。
HTML 学习笔记 (drag & drop)的更多相关文章
- Win10/UWP新特性—Drag&Drop 拖出元素到其他App
在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- jQuery 基础学习笔记总结(一)
Jquery 学习笔记 总结 感想: 此前在做站点时用到过jquery相关,特别是Ajax相关技术.但是并没有系统的进行学习和了解Jquery的强大的功能,趁这几天跟着资料基本的了解下Jquery的特 ...
- React Native 学习笔记--进阶(二)--动画
React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...
- SQLServer学习笔记系列1
一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习Sqlserver写起,自己本身对数 ...
- MySQL4.0命令操作学习笔记
声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
---------------------------------------------------------------------------------------------------- ...
- Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
- Android学习笔记(十七)——数据库操作(下)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 这一次我们来试一试升级数据库,并进行数据库的CRUD操作,其中, C 代表添加(Create) ,R 代表查询 ...
随机推荐
- 【分布式】Zookeeper会话
一.前言 前面分析了Zookeeper客户端的细节,接着继续学习Zookeeper中的一个非常重要的概念:会话. 二.会话 客户端与服务端之间任何交互操作都与会话息息相关,如临时节点的生命周期.客户端 ...
- Ajax接收不到PHP return后的结果的原因
PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题. 解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必 ...
- Spring MVC中文文档翻译发布
前后经过九个月,我翻译的Spring MVC官方4.2.4版本中文文档可以发布第一个较为完整的版本了.译文上尽量做到准确并且符合中文习惯,让人能读懂,能理解.现全文发布如下,也希望它能够给出其价值,并 ...
- sessionStorage 和 localStorage 、cookie
sessionStorage 和 localStorage html5中web storage包括两种储存方式:sessionStorage 和 localStorage sessionStorage ...
- 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧
做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...
- java中的switch case
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...
- Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决
通过继承ActionSupport类来完成Action开发,ActionSupport类不仅对Action接口进行简单实现, 同时增加了验证.本地化等支持 .真实开发中自定义Action都需要继承该类 ...
- datatables中的Options总结(1)
datatables中的Options总结(1) 最近一直研究dataTables插件,下面是总结的所有的选项内容,用了帮助学习datatables插件. 这些选项的配置在$().Datatable( ...
- css和@import区别用法
css和@import都是调用外部样式表的方法. 一.用法 (1)link: <link rel="stylesheet" type="text/css" ...
- Vagrant基础简要记录
Vagrant是一种开源软件,它为跨众多操作系统构建可重复的开发环境提供了一种方法.Vagrant使用提供者(provider)来启动隔离的虚拟环境.默认的提供者是Virtualbox Vagrant ...