【问题标题】:jQuery event.layerX/Y is not relative to the element that triggered the event, is that correct?jQuery event.layerX/Y 与触发事件的元素无关,对吗?
【发布时间】:2010-06-17 11:42:41
【问题描述】:

如果我在 div 上使用例如 mousemove 事件处理程序并检查事件的 layerX 属性,当我的鼠标进入该 div 内的定位元素(如图像)时,它会改变。

根据the jQuery Event object documentation,它应该遵循 W3C DOM Level 3 规范。但是没有提到 the MouseEvent interface 的 layerX/Y 属性,所以我想知道根据规范是什么行为?

在我看来,您似乎总是希望 layerX/Y 与触发事件的层相关,如果我想要嵌套元素的 layerX/Y,我会在不同的阶段检查事件(冒泡)或者将我的处理程序附加到该嵌套元素。

我的问题是(有点主观):layerX/Y 应该如何工作?

【问题讨论】:

    标签: jquery events dom-events


    【解决方案1】:

    你也可以使用:

    var x = e.pageX - this.offsetLeft;

    var y = e.pageY - this.offsetTop;

    这与使用 jQuery element.offset() 属性几乎相同,但此方法使用原生的 offsetTop 和 offsetLeft 属性。

    在底部附近找到:jQuery - Tutorials: Mouse Position

    【讨论】:

    • offsetLeft 和 offsetTop 是相对于 offsetParent 而不是页面。您需要迭代所有 offsetParents。
    【解决方案2】:

    我认为 layerx/y 将是与具有位置(相对或绝对)的触发元素的第一个父节点的偏移量。无论哪种方式,jQuery 都有更好的方法来查找这样的位置,而且不能保证 LayerX/Y 在每个浏览器中都是相同的,所以我不会使用它

    【讨论】:

    • 谢谢,我将代码更改为使用 element.offset().left 和 e.clientX 的组合
    • layerX 和 layerY 在 Chrome v17 中已被弃用
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多