小强的HTML5移动开发之路(16)——神奇的拖放功能
来自:http://blog.csdn.net/dawanganban/article/details/18181273
在智能手机发展飞速的现在拖放功能已经成为一种时尚,但是在我们的浏览器上是不是还缺少这种方便快捷的功能?在HTML5的新标准中就有关于拖放的标准,作为HTML5标准的一部分,任何元素都可以被拖放。
一、浏览器支持情况
Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
注释:在 Safari 5.1.2 中不支持拖放。
二、使用方法
首先,为了使元素可拖动,把 draggable 属性设置为 true :
- <img draggable="true" />
然后,规定元素被拖动时,会发生什么
让ondragstart属性调用一个函数,并给该函数返回一个拖动对象
- <img id="drag1" src="img_logo.gif" draggable="true"
- ondragstart="drag(event)" width="336" height="69" />
dataTransfer.setData() 方法设置被拖数据的数据类型和值:(我们将被拖动对象的id传给dataTransfer)
- function drag(ev)
- {
- <span style="white-space:pre"> </span>ev.dataTransfer.setData("Text",ev.target.id);
- }
放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的 event.preventDefault() 方法:
- event.preventDefault()
当放置被拖数据时,会发生 drop 事件。
在上面,ondrop 属性调用了一个函数,drop(event):
- function drop(ev)
- {
- <span style="white-space:pre"> </span>ev.preventDefault();
- <span style="white-space:pre"> </span>var data=ev.dataTransfer.getData("Text");
- <span style="white-space:pre"> </span>ev.target.appendChild(document.getElementById(data));
- }
代码解释:
- 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
- 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
- 被拖数据是被拖元素的 id ("drag1")
- 把被拖元素追加到放置元素(目标元素)中
二、实例说明
- <!DOCTYPE HTML>
- <html>
- <head>
- <script type="text/javascript">
- //阻止对元素的默认处理方式
- function allowDrop(ev)
- {
- ev.preventDefault();
- }
- //将被拖动对象的id传递给dataTransfer中间对象
- function drag(ev)
- {
- ev.dataTransfer.setData("Text",ev.target.id);
- }
- //取得拖动对象id找到对象实例并用DOM模型添加到<div>里面
- function drop(ev)
- {
- ev.preventDefault();
- var data=ev.dataTransfer.getData("Text");
- ev.target.appendChild(document.getElementById(data));
- }
- </script>
- </head>
- <body>
- <!--要被拖动到的地方-->
- <div id="div1" ondrop="drop(event)"
- ondragover="allowDrop(event)"
- style="border:1px solid red;width:300px;height:200px;">
- </div>
- <!--要被拖动的对象-->
- <img id="drag1" src="test.png" draggable="true"
- ondragstart="drag(event)"/>
- </body>
- </html>
小强的HTML5移动开发之路(16)——神奇的拖放功能的更多相关文章
- 小强的HTML5移动开发之路(42)——HTML4与HTML5文档结构比较
一般来说,人们在书写包括HTML在内的文档时,习惯上按照类似于"章--节--小节"这样的层次结构来进行. 在HTML4中的描述方式: <html> <head&g ...
- 小强的HTML5移动开发之路(18)——HTML5地理定位
来自:http://blog.csdn.net/dawanganban/article/details/18192091 在前面的<小强的HTML5移动开发之路(2)--HTML5的新特性> ...
- 小强的HTML5移动开发之路(14)——Video标签详解
来自:http://blog.csdn.net/dawanganban/article/details/18180605 在前面的小强的HTML5移动开发之路(5)--制作一个漂亮的视频播放器中制作了 ...
- 小强的HTML5移动开发之路(13)——HTML5中的全局属性
来自:http://blog.csdn.net/dawanganban/article/details/18179483 一.accssskey 快捷键 <!DOCTYPE HTML> ...
- 小强的HTML5移动开发之路(11)——链接,图片,表格,框架
来自:http://blog.csdn.net/dawanganban/article/details/18098193 一.HTML是什么? HTML(hypertext mark-uplangua ...
- 小强的HTML5移动开发之路(37)——jqMobi快速入门
在<小强的HTML5移动开发之路(33)-- jqMobi基础>中我们了解了什么是jqMobi,并从官方下载了jqMobi开发包,下载后解压目录如下: 拷贝上面的/css目录./plugi ...
- 小强的HTML5移动开发之路(2)——HTML5的新特性
来自:http://blog.csdn.net/dawanganban/article/details/17592787 一.画布(Canvas) 画布是网页中的一块区域,可所以用JavaScript ...
- 小强的HTML5移动开发之路(12)——从一个多媒体标签说起
来自:http://blog.csdn.net/dawanganban/article/details/18136813 一.视频播放 <html> <head> <ti ...
- 小强的HTML5移动开发之路(3)——HTML5与HTML4比较
来自:http://blog.csdn.net/dawanganban/article/details/17652873 在前面介绍了HTML5的新特性,新标签的使用,智能表单设计,引入多媒体对象,C ...
随机推荐
- discuz全新安装升级,导入旧数据过程,顺便gbk转utf8
由于discuz官方已经不更新了,现在又只有现成的utf8版本,没有gbk版本.我们原来使用的是gbk编码的,最近想改版,顺便升级一下,就索性把gbk也换成utf8吧,这样以后也方便,国际化嘛! 第一 ...
- 中间件——canal小记
接到个小需求,将mysql的部分数据增量同步到es,但是不仅仅是使用canal而已,整体的流程是mysql>>canal>>flume>>kafka>> ...
- PHP AJAX 简介
AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 是什么? AJAX = Asynchronous JavaScript and XML. AJAX ...
- 解决ASP.NET MVC 检测到有潜在危险的 Request.Form 值
提交使用html编辑器编辑后的数据,由于Request时出现有HTML或JavaScript等字符串时,系统会认为是危险性值.立马报错. "从客户端 ... 中检测到有潜在危险的 Reque ...
- iOS进阶之页面性能优化
转载:http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话,"过早的优化是万恶之源",不要过早优化或者过度优化.我 ...
- Rails在MacOS上搭建Heroku部署环境
heroku只是用postgresql,而不能兼容sqlite数据库.所以很重要的一步就是在部署实际产品的时候将数据库类型修改为postgresql,否则你将无法push到heroku上去. hero ...
- Mybatis 批量插入、批量更新
合理的使用批量插入.更新对性能优化有很大的作用,速度明显快了N倍. 要注意数据库连接串后面要新增:&allowMultiQueries=true,表示一个sql ...
- MyBatis批量新增和更新
之前有开发任务一个接口里面有大量的数据新增和更新操作,导致十分缓慢.使用了批量操作之后速度有明显提升,几乎百倍千倍的速度提升. 博主之前统计过,通过普通接口一次数据库插入大概需要200ms,对于大量新 ...
- Android 6.0出现的init: cannot execve(‘XXX’):Permission denied问题:禁止SELINUX的权限设置
最近在开发MTK的相关项目,需要将一些可执行文件添加到init.rc文件里去,但是开机后发现,这个bin文件没有权限不能执行,于是我就在init.rc中对相应的bin文件增加了权限.后来发现,改了也没 ...
- Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能
Android音频处理--通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能 音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下 ...
