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 中。有人可以帮忙吗?
您应该使用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)