event.pageY
获取鼠标相对于整个文档高度(document.documentElement.offsetHeight
)的位置。
但我如何获取鼠标相对于当前视口的位置,即document.documentElement.clientHeight
?
例如,如果浏览器窗口大小为720像素高度,我向下滚动3页并将鼠标保持在窗口中央,则位置应该是“360”,而不是1800(720 x 3 - 720 / 2)。
event.pageY
获取鼠标相对于整个文档高度(document.documentElement.offsetHeight
)的位置。
但我如何获取鼠标相对于当前视口的位置,即document.documentElement.clientHeight
?
例如,如果浏览器窗口大小为720像素高度,我向下滚动3页并将鼠标保持在窗口中央,则位置应该是“360”,而不是1800(720 x 3 - 720 / 2)。
尝试使用 event.clientY
,它应该始终返回正确的值,而不受滚动影响。
https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/clientY
相对于视口的水平鼠标位置:
document.addEventListener('mousemove', event => {
console.log(event.clientY) // THIS should do what you want
})
完整的选项列表如下:
const updateView = (e = {}) => document.getElementById('log').innerHTML = `
<div>
Relative to screen:<br>
e.screenX: <b>${e.screenX || '0'}</b><br>
e.screenY: <b>${e.screenY || '0'}</b>
</div>
<div>
Relative to viewport:<br>
e.clientX: <b>${e.clientX || '0'}</b><br>
e.clientY: <b>${e.clientY || '0'}</b>
</div>
<div>
Relative to page (scroll to see the difference with viewport):<br>
e.pageX: <b>${e.pageX || '0'}</b><br>
e.pageY: <b>${e.pageY || '0'}</b>
</div>
`
document.getElementById('content').innerHTML = `BIG CONTENT `.repeat(300)
document.addEventListener('mousemove', updateView)
updateView()
#log { display:flex;justify-content:center;position:fixed }
#log > div { flex: 1 1 0 }
<div id='log'></div>
<div id='content' style='opacity:.1'></div>
我曾经遇到类似的情况,需要获取相对于视口的光标坐标(因为我的页面可以滚动)。
我尝试了这里的其他答案,但一旦页面被滚动,它们似乎就不起作用了(在不可滚动的页面上效果很好)。
阅读了一些https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent文档页面后,我发现,当处理可滚动页面时,如果您需要相对于当前视口的X和Y坐标(即使已滚动),最好使用event.pageX
。
var pageX = MouseEvent.pageX;
https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/pageX
const eleSvg = document.querySelector('svg');
let point = eleSvg.createSVGPoint();
var cursorpt = point.matrixTransform(eleSvg.getScreenCTM().inverse());
point.viewport_x = cursorpt.x
point.viewport_y = cursorpt.y