【发布时间】:2012-01-24 02:32:21
【问题描述】:
Javascript 允许您在用户将鼠标悬停在某个元素上或当用户单击某个元素时触发自定义事件。但是 Javascript 是如何知道哪些元素应该接收点击事件的呢?
例如这样的 HTML 元素:
<div style="width: 300; height: 300;">
<a href="hello">Hello World</a>
</div>
如果我点击链接,浏览器就会知道执行附加到该链接的所有点击事件。但是浏览器如何知道链接在页面上的哪个位置(甚至是可见的?)
考虑:
<div id="mydiv" style="width: 300; height: 300;">
<a href="hello">Hello World</a>
</div>
<style>
#mydiv a {
display: none;
}
</style>
现在,当我单击链接曾经可见的空间时,什么都不会发生。在这种情况下,浏览器如何知道不触发点击/悬停事件?如果我想重新创建使用的算法,我需要哪些元素?
我假设浏览器代码中有一些看起来像这样的函数:
/* Take user's mouse coordinates and return a DOM element. */
function returnElementBasedOnMouseCoordinate(x, y) {
/* Does a lookup function on some data structure */
return someElementInTheDom;
}
该功能是如何工作的?
【问题讨论】:
-
浏览器知道其中显示的网页的一切。因此,如果您单击网页中的任何位置,浏览器就会知道您单击了什么。所以要小心你点击什么...浏览器知道...
-
您可以在 quirksmode 中从 introduction to events 开始(尽管持保留态度),然后尝试使用 W3C Events spec。浏览器有一个文档对象模型 (DOM),因此它们可以准确地知道每个元素和节点在页面中的位置以及它们的各种属性。
-
RobG:浏览器如何知道哪个元素在顶部?
-
@Kevin - 浏览器如何不“知道”?浏览器创建了布局。它负责页面上的所有对象。它知道关于他们的一切。怎么可能不行?这是一个更好的问题。
-
OK... 存储最顶层(即可点击)元素的数据结构是什么?将鼠标的 x,y 坐标转换为 DOM 元素以触发事件的函数实际上是做什么的?
标签: javascript dom browser