摘要
需求:固定定位下的一个图标随鼠标拖动移动,不允许超过当前浏览器窗口边界
知识点:js的三大家族 -- offset+client
offsetWidth: 获取元素的占位宽度:width+padding+border;
offsetTop: 当前元素的顶部到定位父元素的距离,没有定位父元素,就是到body的距离。
clientX:获取当前鼠标的位置,相对于屏幕。
clientWidth : 元素的可视宽度:width+左右padding
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
padding: 0px;
margin: 0px;
}
#box {
width: 50px;
height: 50px;
position: fixed;
top: 0px;
left: 0px;
}
</style>
</head>
<body>
<img id="box" src="https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_50x50.jpg" alt="">
<script>
var box = document.getElementById("box");
move(box);
function move(obj) {
obj.onmousedown = function (ev) {
var ev = window.even || ev;
var x = ev.clientX - obj.offsetLeft;
var y = ev.clientY - obj.offsetTop;
document.onmousemove = function (ev) {
var ev = window.even || ev;
var minleft = ev.clientX - x;
var mintop = ev.clientY - y;
if (minleft < 0) {
minleft = 0;
}
if (minleft > document.documentElement.clientWidth - obj.offsetWidth) {
minleft = document.documentElement.clientWidth - obj.offsetWidth;
}
if (mintop < 0) {
mintop = 0;
}
if (mintop > document.documentElement.clientHeight - obj.offsetHeight) {
mintop = document.documentElement.clientHeight - obj.offsetHeight;
}
obj.style.left = minleft + "px";
obj.style.top = mintop + "px";
}
document.onmouseup = function () {
document.onmousemove = null;
}
return false;
}
}
</script>
</body>
</html>
链接
原生js三大家族