:盒子拖动demo(兼容主流PC端浏览器, 行为基本一致)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
#box {
width: 200px;
height: 200px;
background-color: red;
position: absolute;
left: 0;
top: 0;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
</style>
<script>
function getClient() {
return {
clientWidth: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
clientHeight: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
}
}
function getPage(e) {
e = e || window.event;
return {
pageX: e.pageX || e.clientX + document.documentElement.scrollLeft || 0,
pageY: e.pageY || e.clientY + document.documentElement.scrollTop || 0
}
}
window.onload = function () {
var box = document.getElementById('box');
var userAgent = window.navigator.userAgent;
var mytarget = null;
if (userAgent.indexOf('Firefox') !== -1) {
mytarget = window;
} else {
mytarget = document.documentElement;
}
box.onmousedown = function () {
var pointX = getPage().pageX - box.offsetLeft;
var pointY = getPage().pageY - box.offsetTop;
mytarget.onmousemove = function () {
var pageX = getPage().pageX - pointX;
var pageY = getPage().pageY - pointY;
pageX = pageX < 0 ? 0 : pageX;
pageY = pageY < 0 ? 0 : pageY;
pageX = pageX > (getClient().clientWidth - box.offsetWidth) ? (getClient().clientWidth - box.offsetWidth) : pageX;
pageY = pageY > (getClient().clientHeight - box.offsetHeight) ? (getClient().clientHeight - box.offsetHeight) : pageY;
box.style.left = pageX + 'px';
box.style.top = pageY + 'px';
}
}
mytarget.onmouseup = function () {
mytarget.onmousemove = null;
}
}
</script>
</head>
<body>
<div id="box" unselectable="on">测试盒子</div>
</body>
</html>