现在,新增的HTML5元素很多,也给开发者带来了很多便利,比如说:结构标记header 、nav、arctile、section、footer 表单元素:url、date、emaile、search、tel、range、color、datalist、progress、meter、output等,还有一些webstroge元素、绘图元素、拖放api等,这里着重说一下拖放api。

  在生活中,我们经常将桌面的应用程序元素,从一个地方拖拽到另外一个地方,开发者没有一种能实现这种操作的标准技术,在HTML5标准中引入了拖放api,从而实现了这种功能,在拖放API中,一些事件是由(源元素)拖放的元素触发,另外一些事件是由(目标元素)投放的元素触发,源元素事件如下:

  dragstart:当拖动开始的时候,触发这个事件

  drag:源元素发生拖动的时候,触发;与mouseover事件类似

  dragend:当拖动操作结束时,源元素触发这个事件

目标元素事件如下:

  dragenter:拖动操作的过程中,当鼠标指针第一次进入目标区域的时候,就会触发这个事件

  dragover:当对象拖动到目标对象时触发

  drop:当拖动操作在目标元素内投放的时候,目标元素会触发这个事件

  dragleave:在拖动的过程中,被拖放对象离开目标对象时触发

我总觉得,用口述不能清楚的表达意思,还是来段小代码,更加明白,HTML中的代码如下:

<div id="lt">
<!-- 源元素 -->
<img id="img" src="bg.jpg">
</div>
<!-- 目标元素 -->
<div id="rt"></div>

两个div盒子已经设置好了,但是,我们还没给它打扮着装,所以,这时候,就需要css出场了,css代码如下:

#lt {
width : 300px;
height : 200px;
border : 1px solid black;
padding : 20px;
float : left;

margin-right:20px;

}
#rt {
width : 300px;
height : 200px;
border : 1px solid black;
padding : 20px;
float : left;

}

另外呢,这只是将我们的静态页面展现了出来,但是要想实现拖放,当然少不了我们的js了,js代码如下:

<script>
// 获取源元素
var img = document.getElementById("img");
// 绑定拖拽事件 - 默认允许触发的
img.ondragstart = function(event){
console.log(event.dataTransfer);

var trans = event.dataTransfer;
trans.setData("text",event.target.src);

trans.effectAllowed = "move";
console.log("拖放开始");
}
img.ondrag = function(event){
console.log("拖拽过程中...");
}
img.ondragend = function(event){
console.log("结束拖拽啦...");
var lt = document.getElementById("lt");
lt.removeChild(event.target);
}
// 获取目标元素
var rt = document.getElementById("rt");
// 绑定目标元素事件
rt.ondragenter = function(event){
console.log("第一次进入目标区域...");
}
rt.ondragover = function(event){
event.preventDefault();
console.log("拖放到目标对象罗!...");
}
rt.ondrop = function(event){
console.log("投放进去...");
var trans = event.dataTransfer;
var src = trans.getData("text");
rt.innerHTML = "<img src='"+src+"'>";

trans.clearData("text");
}
rt.ondragleave = function(event){
console.log("整个拖放过程结束...");
}
</script>

其中在浏览器运行的时候,打开控制台可以看到整个拖放过程哦,页面开始效果如下:

用鼠标拖放过程中的效果如下图:

拖放后的效果如下图:

好了,简单的HTML5的拖放就到此结束了,希望大家多给意见哦。

浅谈HTML5拖放的更多相关文章

  1. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  2. 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...

  3. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  4. 浅谈html5 video 移动端填坑记

    这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...

  5. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  6. 浅谈html5及其新特性

    什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...

  7. 浅谈html5 响应式布局

    一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为解决移动互联 ...

  8. (转)浅谈HTML5与css3画饼图!

    神马系饼图? 饼图,大家都应该熟知,在统计数据对比方面,几乎处处用到.如cnzz的统计饼图 从饼图中,很形象地展示了访问者地区的分布,以扇形为块的方式拼成一个大圆. 都使用什么方法实现 目前众多站点制 ...

  9. 浅谈 HTML5 的 DOM Storage 机制 (转)

    在开发 Web 应用时,开发者有时需要在本地存储数据.当前浏览器支持 cookie 存储,但其大小有 4KB 的限制.这对于一些 Ajax 应用来说是不够的.更多的存储空间需要浏览器本身或是插件的支持 ...

随机推荐

  1. 【.Net Remoting-1】

    [.NetRemoting]2015.09.16 [分布式应用程序] 应用程序分布在不同计算机上,通过网络来共同完成一项任务 C/S架构[模式] [互操作性,Interoperability]又称[互 ...

  2. 秒(s) 毫秒(ms) 微秒(μs) 纳秒(ns) 皮秒(ps)及Java获得 .

    Date date=new Date(); long hm=date.getTime(); //获取毫秒 或者 毫秒级:System.currentTimeMillis() 纳秒级: System.n ...

  3. 利用radio实现纯css选项卡切换

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtIAAABCCAIAAAD18aaXAAAG70lEQVR4nO3dO5KrPBCGYRY0VV4OEX

  4. project euler 19: Counting Sundays

    import datetime count = 0 for y in range(1901,2001): for m in range(1,13): if datetime.datetime(y,m, ...

  5. Django学习(七) 创建第一个Django项目

    如果这是你第一次使用Django,你必须进行一些初始设置.即,您将需要自动生成一些代码,建立了Django项目. 从命令行.cd进入一个目录,你想要存储您的代码,然后运行以下命令: django-ad ...

  6. Starship Troopers(HDU 1011 树形DP)

    题意: 给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子 ...

  7. jQuery中$符号冲突问题 (转载)

    Jquery的$命名冲突: 在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多 ...

  8. unzip解压中文文件名乱码

    由于中文的Windows使用的是GBK编码,而Linux默认使用UTF-8编码的,如果在Windows打包带中文文件的zip包,则这个zip包在Linux下面使用默认的归档管理器打开这个zip包的时候 ...

  9. C# 获取当前应用程序的绝对路径支持asp.net

      Asp.net在类库中获取某文件的绝对路径.这个问题在初学的时候就经常碰到过,经常是查了忘,忘了查.浪费了大量的今天专门写个文章,以后到这里查.有时间顺便记得研究下这个东西. 在主程序目录就不说了 ...

  10. VC断点不可用的问题

    文章一 今天我笔记本的VC编译器莫名其妙的就进入不了断点了,而台式机确是好的,问题是一进入调试,断点就自动被取消了,郁闷了一下午,无法进入断点的原因很多,都有想重装VC编译器的打算了,晚上回来查查资料 ...