Skip to content

Instantly share code, notes, and snippets.

@pramper
Last active July 29, 2016 00:44
Show Gist options
  • Save pramper/18843d9e74194990f41ba6d5844ce77d to your computer and use it in GitHub Desktop.
Save pramper/18843d9e74194990f41ba6d5844ce77d to your computer and use it in GitHub Desktop.
使用HTML5的拖放事件来拖放HTML元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
html, body{
width: 100%;
height: 100%;
}
#box{
position: absolute;
width: 200px;
left: 0;
top: 0;
}
#box-header{
width: 100%;
height: 30px;
background-color: #fcc;
cursor: move;
}
#box-content{
width: 100%;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="box" draggable="true">
<div id="box-header"></div>
<div id="box-content"></div>
</div>
<script>
var box = document.getElementById('box')
var body = document.body
var drag = function() {
var boxCSS = document.defaultView.getComputedStyle(box, null)
var innerX, innerY // 鼠标距别拖曳元素左边界和上边界的距离
/**
* @param {[element]} el:被拖放的元素
* @param {[element]} target:拖放的目标元素
*/
function startDrag(el, target) {
el.addEventListener("dragstart", function() {
innerX = event.clientX - parseInt(boxCSS.left)
innerY = event.clientY - parseInt(boxCSS.top)
}, false)
el.addEventListener("dragend", function() {
this.style.left = event.clientX - innerX + 'px'
this.style.top = event.clientY - innerY + 'px'
}, false)
target.addEventListener("dragenter", function() {
event.preventDefault()
}, false)
target.addEventListener("dragover", function() {
event.preventDefault()
}, false)
target.addEventListener("drop", function() {
event.preventDefault();
}, false)
}
return startDrag
}()
drag(box, body)
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment