我试图让 div 元素跟随我的鼠标(javascript),但它总是出现故障

Hon*_*oop 4 html javascript css addeventlistener

我一直在尝试使用 javascript 获取一个 div 元素来跟随我的鼠标,但它总是在左上角出现故障。这是我的代码: HTML:

<html>
  <body>
    <div id="circle"></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS:

body{
  margin:0;
  padding:0;
  overflow:hidden;
  background-color:#77dd77;
}
div{
  position:absolute;
  transform:translate(-50%,-50%);
  height:35px;
  width:35px;
  border-radius:50%;
  border:2px solid black;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript:

document.addEventListener('mousemove', function(e) {
  let body = document.querySelector('body');
  let circle = document.getElementById('circle');
  let left = e.offsetX;
  let top = e.offsetY;
  circle.style.left = left + 'px';
  circle.style.top = top + 'px';
});
Run Code Online (Sandbox Code Playgroud)

我仍然很难确定错误是发生在 CSS 还是 JavaScript 中。有人可以帮忙吗?

Mat*_*oak 6

您应该使用e.pageYande.pageX而不是e.offset...因为page...与整个文档相关。offset...是相对于父容器(在本例中body)的,并且由于body没有高度(因为它的子容器具有绝对位置),因此鼠标检测offset...不一致。

let circle = document.getElementById('circle');

const onMouseMove = (e) =>{
  circle.style.left = e.pageX + 'px';
  circle.style.top = e.pageY + 'px';
}

document.addEventListener('mousemove', onMouseMove);
Run Code Online (Sandbox Code Playgroud)
body{
  margin:0;
  padding:0;
  overflow:hidden;
  background-color:#77dd77;
}
#circle{
  position:absolute;
  transform:translate(-50%,-50%);
  height:35px;
  width:35px;
  border-radius:50%;
  border:2px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <body>
    <div id="circle"></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)