offset 用于获取元素的偏移量:
能够获取元素间隔带有定位的父元素的地位【留神条件须要有定位】,如果父元素没有定位,则会向上寻找直到找到带有定位的那个父级元素
offsetTop:获取到元素间隔带有定位的父元素的顶部的间隔
offsetLeft:获取到元素间隔带有定位的父元素的右边的间隔
能够获取元素自身的大小(获取到的值不带单位), padding + width + border
offsetWidth:获取到元素的宽度
offsetHeight:获取到元素的高度
理解了 offsetTop 和 offsetLeft 之后咱们就能够做一个拖拽元素的小练习了,实现思路如下图:
代码如下:
<!DOCTYPE html><html lang="cn"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ padding: 0; margin: 0; } body{ position: relative; } .box{ width: 100px; height: 100px; background-color: red; position: absolute; } </style></head><body> <div class="box"></div> <script> let box = document.querySelector('.box') /** * 应该先获取到鼠标在盒子外面的地位 * 鼠标在盒子内的地位 = 鼠标在页面的地位 - 盒子间隔屏幕边的间隔 * 盒子间隔屏幕边的间隔 = 鼠标在页面的地位 - 鼠标在元素内的地位 */ //鼠标按下 box.addEventListener('mousedown',function(e){ let mouseX = e.pageX - box.offsetLeft let mouseY = e.pageY - box.offsetTop //鼠标挪动工夫办法,这个办法肯定要抽离进去,这样能力通过 removeEventListener 将监听事件移除 var move = function(e){ let left = e.pageX - mouseX let top = e.pageY - mouseY //实现拖拽 box.style.left = left + 'px' box.style.top = top + 'px' //鼠标抬起 box.addEventListener('mouseup',function(e){ //移除鼠标挪动监听,完结追随2 box.removeEventListener('mousemove', move) }) } box.addEventListener('mousemove', move) }) </script> </body></html>