HTML5新特性 拖拽使用心得
本文主要介绍了拖拽和拖放的几个属性
先构建一个框架
<div id="wrap">
<img id="drag" src="" draggable="true">
<div id="drop" >
<span>目标区域</span>
</div>
</div>
draggable
为了使元素可拖动,将draggable
属性设置为true
<img id="drag"
src="b5208ba59f1f064a2d39f991bc1e4dba.jpg"
alt="可拖动的图片"
draggable="true"/>
ondragstart
作用于拖拽元素上,当拖拽元素被拖动的时候触发此事件
<img id="drag"
src="b5208ba59f1f064a2d39f991bc1e4dba.jpg"
alt="可拖动的图片"
draggable="true"
ondragstart="start()"/>
ondragenter
据张鑫旭的文章《HTML5 drag & drop 拖拽与拖放简介
》中描述
ondragenter
事件:当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上
http://www.zhangxinxu.com/wordpress/2011/02/html5-drag-drop-%E6%8B%96%E6%8B%BD%E4%B8%8E%E6%8B%96%E6%94%BE%E7%AE%80%E4%BB%8B/
目标元素设置
<div id="drop"
ondragenter="enter()">
目标区域
</div>
关于这个属性,在几个主流的浏览器Safari、Chrome、Firefox、Opera下进行了测试。并不是当拖拽元素进入目标元素的时候触发,而是拖拽过程中,作用于拖拽元素上的拖拽点进入目标元素的时候触发。简而言之,就是鼠标位置进入目标元素所在区域,ondragenter
事件触发,可触发多次。
ondragleave
作用于目标元素上,拖拽元素上的光标点离开目标区域时触发ondragleave
属性。
ondragover
作用于目标元素上,当拖拽元素在目标元素上移动的时候触发。经测试,光标在目标元素区域内移动会触发ondragover
事件,当光标落在目标区域外,即使拖拽元素仍在目标区域内,ondragover
事件无法触发
<div id="drop"
ondragenter="enter()"
ondragover="over()">
目标区域
</div>
ondrop
作用于目标元素上,当光标在目标区域内,松开鼠标时触发ondrop
事件。
<div id="drop"
ondragenter="enter()"
ondragover="over()"
ondrop="letGo()">
目标区域
</div>
注意事项:①需要在ondragover
事件中执行preventDefault()
阻止默认事件,否则无法触发ondrop
事件。②需要配合ondragover
事件使用。
ondragend
作用于拖拽元素,拖拽完成时触发
ondragexit
据点点乐淘淘的文章《H5 拖放事件详解》描述
dragexit:当元素不再是拖动操作的直接选择元素时触发(很少使用)http://www.cnblogs.com/diantao/p/6282068.html
(既然不常用就先不研究它啦,需要的时候再补充)
贴一个小demo
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
transition: 2s;
}
#wrap{
width: 400px;
padding: 20px 0;
margin: 0 auto;
background-color: #e8e5e5;
text-align: center;
}
#drop{
position: relative;
width: 300px;
height: 300px;
line-height: 300px;
margin: 0 auto;
border: 1px solid;
text-align: center;
font-size: 30px;
border-radius: 20%;
}
#drag{
border-radius: 20%;
}
#imgWrap{
width: 250px;
height: 221px;
margin: 0 auto;
margin-bottom: 10px;
}
#notice{
position: absolute;
width: 100%
}
.change{
animation: change .1s 10;
/*animation-iteration-count: 10;*/
}
@keyframes change{
0%{
background-color: #fff;
}
100%{
background-color: red;
}
}
</style>
</head>
<body>
<div id="wrap">
<div id="imgWrap">
<img id="drag" src="" draggable="true" ondragstart="start()" ondragend="end()">
</div>
<div id="drop" ondragenter="enter()" ondragleave="leave()" ondragover="over(event)" ondrop="letGo()">
<div id="notice">将图片拖入此处</div>
</div>
</div>
</body>
<script type="text/javascript">
function start() { // 拖拽元素移动的时候触发
drag.style.opacity = 0;
}
function enter() { // 光标进入目标元素区域的时候触发
drop.className = "change";
notice.innerHTML = "";
}
function leave() { // 光标离开目标元素区域的时候触发
drop.style.backgroundColor = "";
drag.style.opacity = 1;
}
function over(ev) { // 光标在目标元素区域内移动的时候触发
ev.preventDefault();
if (drag.style.opacity == 0) {
drop.style.backgroundColor = "red";
}
}
function letGo() { // 光标在目标元素区域内并松开鼠标的时候触发
drag.style.opacity = 1;
drop.style.backgroundColor = "";
}
function end() { // 拖拽结束的时候触发
drop.appendChild(drag);
drag.style.verticalAlign = "middle";
drag.draggable = false;
}
</script>
</html>
(有没有大神教我怎么在代码块内正确的写img标签,我写的发布之后总会变样了,so sad...)
欢迎小伙伴们指正