.cursor
должен быть фиксированной областью, и вы должны использовать clientX
и clientY
, поскольку они относятся к клиентской области, а не ко всей странице.
Вместо перемещениявесь курсор, который требует переполнения, переместите линию .vt
по горизонтали, а линию .hl
по вертикали.
const cursorVT = document.querySelector('.vt')
const cursorHL = document.querySelector('.hl')
document.addEventListener('mousemove', e => {
cursorVT.setAttribute('style', `left: ${e.clientX}px;`)
cursorHL.setAttribute('style', `top: ${e.clientY}px;`)
})
body {
height: 500vh;
margin: 0;
overflow: auto;
}
.cursor {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
pointer-events: none;
}
.vt {
position: absolute;
top: 0;
bottom: 0;
width: 1px;
background: black;
}
.hl {
position: absolute;
height: 1px;
left: 0;
right: 0;
background: black;
}
<div class="cursor">
<div class="vt"></div>
<div class="hl"></div>
</div>