本文主要介绍了拖拽和拖放的几个属性
先构建一个框架
<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...)
欢迎小伙伴们指正