我正在研究我在网上找到的一个小 js 谜题,其中指出要编写一些 js 以找到最接近鼠标单击事件的链接。我有一个好的开始,但我想知道社区是否可以帮助我找到改进它的方法。
我的基本方法是基本上遍历所有链接,找出它们与 mouseclick 事件的距离,然后将其存储到下一次迭代或所有元素都用尽,在这种情况下,我将返回最近的元素。
我想就以下问题提供反馈:
- 我的算法准确吗?有哪些陷阱?
- 是否有更快、更好的方法来确定最近的链接?
我能想到的一个问题是,我基本上是使用链接元素的左上角来确定距离,但是如果点击实际上是在链接本身上还是在元素的右下角呢?链接应该是最接近的元素,但在我的实现中,下一个链接可能更接近并触发不正确的结果。
<body>
<p><a href="" id="1">link 1</a></p>
<p><a href="" id="2">link 2</a></p>
<script>
window.FindNearestElementToBodyClick = {
init: function() {
document.addEventListener("click", this.findElementClosestToClick, true);
},
findElementClosestToClick: function(e) {
var x = e.x;
y = e.y;
var elems = document.body.getElementsByTagName("a"),
closestElem = {};
for(var i = 0; i < elems.length; i++) {
var eX = elems[i].offsetLeft,
eY = elems[i].offsetTop;
var diff = Math.sqrt((Math.abs(eX - x)*2) + (Math.abs(eY-y)*2));
if(closestElem.e == undefined) {
closestElem.e = {e: elems[i], diff: diff};
}
if( diff < closestElem.diff )
closestElem.e = {e: elems[i], diff: diff};
}
console.log(closestElem);
}
}
FindNearestElementToBodyClick.init();
</script>
</body>