当 touchend 事件被调用时,我需要发现手指下方的 HTML 元素。 我正在使用的代码是;
$('.wsSquare').on("mouseup touchend",function(event){
event.preventDefault();
event.stopPropagation();
console.log($(event.target).data());
});
在非触摸设备上,使用鼠标可以正确记录与mouseup事件相关的元素数据。
然而,在触摸设备(iPad Safari)上,event.target是在touchstart事件期间手指下方的元素,并记录touchstart事件下的元素数据。
我还研究了touchmove事件的行为,这也具有相同的行为(event.target是touchstart元素)。似乎所有触摸事件的目标都是手势开始时的触摸元素。
当调用touchend事件时,我需要访问手指下的元素。我的手势可能会遍历许多元素。
编辑
进一步的研究从规范中发现了以下内容。
5.5 touchend事件
用户代理必须调度此事件类型以指示用户何时从触摸面板上移除触点,包括触点物理离开触摸面板的情况,例如被拖出屏幕。
此事件的目标必须是触摸点首次放置在表面上时的相同元素,即使触摸点后来已经移动到目标元素的交互区域之外。
已删除的触摸点必须包含在TouchEvent的changedTouches属性中,不得包含在touches和targetTouches属性中。
因此,观察到的行为是正确的,我该如何更改这种行为?
TouchEvent
本身没有坐标,但是.changedTouches.item(0)
应该有pageX/Y
坐标。 - Bergivar quit = e.changedTouches;
,然后在应用下一行之前检查它是否不为假值。if (quit) var elem = document.elementFromPoint(quit[0].clientX, quit[0].clientY);
。我为了可读性使用了不同的变量。 - Shikkediel