拖拽属性
**
| 针对对象 | 事件名称 | 说明 |
|---|---|---|
| 被拖动的元素 | dragstart | 开始被拖动触发,不是元素图形进行目标区域触发的,是鼠标指针进入时才触发的 |
| drag | 拖动时反复触发 | |
| dragend | 拖拽完成时 | |
| 目标对象 | dragenter | 进入目标对象 |
| dragover | 目标对象内 | |
| dragleave | 拖动元素没有被放下就离开目标元素 | |
| drop | 在目标元素放下(需要取消浏览器默认行为) |
备注:方法中需要在加上 on 例如 **ondragstart.
所有的标签元素,当拖拽周期结束时,默认事件是回到原处。
阻止浏览器的默认行为,e.preventDefault()。
**
默认带拖拽属性**
a img 标签
拖拽的生命周期
1.拖拽开始,拖拽进行中,拖拽结束
2.被拖拽的物体,目标区域
clientX
clientY
简单实现 (注:pc端 移动端下面无法实现
<style>.a{position: absolute;}</style><body><div class="a" draggable="true"></div><!--按下物体的瞬间是不会触发事件的--><script>var oDrageDiv = document.getElementsByClassName("a")[0]var beginX = 0var beginY = 0oDrageDiv.ondragstart = function (e) {// console.log(e)beginX = e.clientXbeginY = e.clientY}// oDrageDiv.ondrag = function(e){// console.log(e)// }oDrageDiv.ondragend = function (e) {// console.log(e)var x = e.clientX - beginXvar y = e.clientY - beginYoDrageDiv.style.left = oDrageDiv.offsetLeft + x + "px"oDrageDiv.style.top = oDrageDiv.offsetTop + y + "px"}</script></body>
例子实现
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0;padding: 0;}.box1 {position: absolute;width: 150px;height: auto;border: 1px solid black;padding-bottom: 10px;}.box2 {position: absolute;width: 150px;min-height:100px ;border: 1px solid black;padding-bottom: 10px;left: 300px;}li {position: relative;width: 100px;height: 30px;background: #abcdef;margin: 10px auto;list-style: none;}</style></head><body><div class="box1"><ul><li>1</li><li>2</li><li>3</li></ul></div><div class="box2"></div><script>var dragDom;var liList = document.getElementsByTagName("li")for(var i=0;i<liList.length;i++){liList[i].setAttribute("draggable",true)liList[i].ondragstart = function(e){dragDom = e.targetconsole.log(e)}}var box2 = document.getElementsByClassName("box2")[0]box2.ondragover = function(e){e.preventDefault();}box2.ondrop = function(e){console.log(e)box2.appendChild(dragDom)dragDom = null}var box1 = document.getElementsByClassName("box1")[0]box1.ondragover = function(e){e.preventDefault();}box1.ondrop = function(e){box1.appendChild(dragDom)dragDom = null}</script></body></html>
http://jartto.wang/2017/10/23/html5-drag/
https://juejin.im/post/6844904040711585799
符合题意但是无法实现
原因:移动端不支持这个事件
https://segmentfault.com/a/1190000014572113
