XHTML5 ----- 拖拽事件 (拖拽一段文字和图片案例)
2015-09-24 23:39
579 查看
1、拖拽一段文字
功能实现:
拖拽一段文字到一个区域,复制进去
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
<div id="div1" ></div>
<br />
<p id="drag1">这是一段可移动的段落。请把该段落拖入上面的矩形。</p>
这里p中的类容就是待拖拽的东西 div1为目标区域,首先要让这段文字拖拽,第一步要设置p 元素的draggable属性为"true"
然后绑定事件--开始拖拽事件
ondragstart="drag(event)"
在这个事件中我们应该 处理什么事情呢?
我们设置要发出拖拽的数据,观察PPT上的信息
我们应该设置data在js中设置发送
ev.dataTransfer.setData("Text",ev.target.id);
这时候开始拖拽
这时候观察页面
然后我们应该在规定好的区域开始接受,接受之前给div绑定事件
ondrop="drop(event)"
我们开始在js中写接受
var data= e.dataTransfer.getData('Text')---接收数据
ev.target.appendChild(document.getElementById(data));--将接受的数据添加到当前区域
注意:
1. 若想触发ondrop事件,ondragover 中需要阻止默认事件(元素默认是不允许放置的)。
2. 在Firefox 3.5+中,如果是把图像拖放到放置目标上,页面就会转向图像文件;而如果是把文本拖放到放置目标上,则会导致无效URL错误,因此,为了让Firefox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL。
组织浏览器默认行为e.preventDefault();
当接收完毕之后再组织默认行为一次
ondragover="allowDrop(event)"
function allowDrop(ev)
{
ev.preventDefault();
}
完整代码如下:
2、拖拽图片的案例
1.创建拖拽对象
①给需要拖拽的元素设置draggable属性,它有三个值:
true:元素可以被拖拽;
false:元素不能被拖拽;
auto: 浏览器自己判断元素是否能被拖拽。
2.处理拖拽事件
①当我们拖拽对象的时候会触发拖拽事件包括:
A.dragstart:当元素拖拽开始触发;
B.drag:在元素拖拽过程中触发;
C.dragend:元素拖拽结束时触发
3.创建投放区
①当拖拽对象进入投放区的时候会触发相关的事件
A.dragenter:当拖拽对象进入投放区时触发;
B.dragover:拖拽对象在投放区内移动时触发;
C.dragleave:拖拽对象没有投放到投放区,离开投放区的 时候触发;
D.drop:拖拽对象投放在投放区时触发。
②注意:dragenter、dragover可能会受到默认事件的影 响,所以我们在这两个事件当中使用 e.preventDefault();来阻止事件默认事件
4.使用dataTransfer传递数据
当我们需要拖拽对象向投放区传递数据的时候用到 dataTransfer有下面的属性和方法:
1.types:返回数据的格式;
2.getData(<format>):返回指定格式数据;
3.setData(<format>, <data>):设置指定格式数据;
4.clearData(<format>):移除指定格式数据;
5.files:返回已经投放的文件的信息数组。
1.type:文件类型
2.size:文件大小
3.name:文件名
完整代码:
功能实现:
拖拽一段文字到一个区域,复制进去
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
<div id="div1" ></div>
<br />
<p id="drag1">这是一段可移动的段落。请把该段落拖入上面的矩形。</p>
这里p中的类容就是待拖拽的东西 div1为目标区域,首先要让这段文字拖拽,第一步要设置p 元素的draggable属性为"true"
然后绑定事件--开始拖拽事件
ondragstart="drag(event)"
在这个事件中我们应该 处理什么事情呢?
我们设置要发出拖拽的数据,观察PPT上的信息
我们应该设置data在js中设置发送
ev.dataTransfer.setData("Text",ev.target.id);
这时候开始拖拽
这时候观察页面
然后我们应该在规定好的区域开始接受,接受之前给div绑定事件
ondrop="drop(event)"
我们开始在js中写接受
var data= e.dataTransfer.getData('Text')---接收数据
ev.target.appendChild(document.getElementById(data));--将接受的数据添加到当前区域
注意:
1. 若想触发ondrop事件,ondragover 中需要阻止默认事件(元素默认是不允许放置的)。
2. 在Firefox 3.5+中,如果是把图像拖放到放置目标上,页面就会转向图像文件;而如果是把文本拖放到放置目标上,则会导致无效URL错误,因此,为了让Firefox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL。
组织浏览器默认行为e.preventDefault();
当接收完毕之后再组织默认行为一次
ondragover="allowDrop(event)"
function allowDrop(ev)
{
ev.preventDefault();
}
完整代码如下:
<script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); } function drag(e){ e.dataTransfer.setData("Text",e.target.id); } function drop(e){ var data= e.dataTransfer.getData('Text') e.target.appendChild(document.getElementById(data)); e.preventDefault(); } </script> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)" ></div> <br /> <p id="drag1" draggable="true" ondragstart="drag(event)">这是一段可移动的段落。请把该段落拖入上面的矩形。</p>
2、拖拽图片的案例
1.创建拖拽对象
①给需要拖拽的元素设置draggable属性,它有三个值:
true:元素可以被拖拽;
false:元素不能被拖拽;
auto: 浏览器自己判断元素是否能被拖拽。
2.处理拖拽事件
①当我们拖拽对象的时候会触发拖拽事件包括:
A.dragstart:当元素拖拽开始触发;
B.drag:在元素拖拽过程中触发;
C.dragend:元素拖拽结束时触发
3.创建投放区
①当拖拽对象进入投放区的时候会触发相关的事件
A.dragenter:当拖拽对象进入投放区时触发;
B.dragover:拖拽对象在投放区内移动时触发;
C.dragleave:拖拽对象没有投放到投放区,离开投放区的 时候触发;
D.drop:拖拽对象投放在投放区时触发。
②注意:dragenter、dragover可能会受到默认事件的影 响,所以我们在这两个事件当中使用 e.preventDefault();来阻止事件默认事件
4.使用dataTransfer传递数据
当我们需要拖拽对象向投放区传递数据的时候用到 dataTransfer有下面的属性和方法:
1.types:返回数据的格式;
2.getData(<format>):返回指定格式数据;
3.setData(<format>, <data>):设置指定格式数据;
4.clearData(<format>):移除指定格式数据;
5.files:返回已经投放的文件的信息数组。
1.type:文件类型
2.size:文件大小
3.name:文件名
完整代码:
<div id="layer1"> <img src="images/w3school_logo_black.gif" draggable="true" ondragstart="drag(event)" id="drag1" /> </div> <div id="layer2" ondragover="allowDrop(event)" ondrop="drop(event)"></div> <script type="text/javascript"> function drag(e){ e.dataTransfer.setData('Text', e.target.id); } function allowDrop(e){ e.preventDefault();// } function drop(e){ var data= e.dataTransfer.getData('Text'); e.target.appendChild(document.getElementById(data)); e.preventDefault();// } </script>
相关文章推荐
- 关于表单的提交方式(html5)
- html5_ajax
- XHTML5 ----- 实现多媒体播放
- HTML5中的表单+Ajax+localStorage+Cookie
- html5 localStorage and cookie
- HTML5 history新特性pushState、replaceState
- HTML5表单及其验证【html自带属性验证】
- HTML5与CSS3基础教程-前言笔记
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
- 学习html5的video标签
- 下载网页中的html5视频之手动方法
- HTML5本地存储之Web Storage篇
- HTML5本地存储之Database Storage篇
- 小强的HTML5移动开发之路(18)——HTML5地理定位
- 小强的HTML5移动开发之路(18)——HTML5地理定位
- 小强的HTML5移动开发之路(18)——HTML5地理定位
- Canvas(1)之HelloWorld
- 小强的HTML5移动开发之路(17)——HTML5内联SVG