只想这么说,我认为 jQuerymouseenter
和mouseleave
事件会让这更容易,但如果你不能使用它们,也许这会对你有所帮助。
根据您的页面布局方式,这可能不会太难。您可以使用以下方法获取元素的位置。引用另一个答案
element.offsetLeft
并且element.offsetTop
是用于查找元素相对于其 offsetParent 位置的纯 javascript 属性;是最近的具有相对或绝对位置的父元素
因此,如果您的元素相对于 定位body
,那么到目前为止一切都很好(我们不需要调整任何东西)。
现在,如果我们给 mousemove 事件附加一个事件document
,我们可以得到鼠标的当前坐标:
document.addEventListener('mousemove', function (e) {
var x = e.clientX;
var y = e.clientY;
}, false);
现在我们只需要确定鼠标是否落在元素内。为此,我们需要元素的高度和宽度。引用另一个答案
您应该使用.offsetWidth
and.offsetHeight
属性。请注意,它们属于元素,而不是 .style。
例如:
var element = document.getElementById('element');
var height = element.offsetHeight;
var width = element.offsetWidth;
现在我们有了我们需要的所有信息,只需要确定鼠标是否落在元素内。我们可能会使用这样的东西:
var onmove = function(e) {
var minX = element.offsetLeft;
var maxX = minX + element.offsetWidth;
var minY = element.offsetTop;
var maxY = minY + element.offsetHeight;
if(e.clientX >= minX && e.clientX <= maxX)
//good horizontally
if(e.clientY >= minY && e.clientY <= maxY)
//good vertically
}