【发布时间】:2012-07-02 12:36:21
【问题描述】:
当我在 iPad 上尝试时,e.touches[0] 中没有 offsetX。有谁知道我在哪里可以得到这个 offsetX 的值?
【问题讨论】:
标签: javascript ipad events
当我在 iPad 上尝试时,e.touches[0] 中没有 offsetX。有谁知道我在哪里可以得到这个 offsetX 的值?
【问题讨论】:
标签: javascript ipad events
谢谢,@Kontiki - 这是最终为我解决问题的解决方案:
if("touchmove" == e.type)
{
let r = canvas.getBoundingClientRect();
currX = e.touches[0].clientX - r.left;
currY = e.touches[0].clientY - r.top;
}
else
{
currX = e.offsetX;
currY = e.offsetY;
}
【讨论】:
页面 - 偏移量/客户端方法对我不起作用。仍然有一个偏移量。我发现这个完美的解决方案:
let r = canvas.getBoundingClientRect();
let x = e.touches[0].pageX - r.left;
let y = e.touches[0].pageY - r.top;
【讨论】:
基于建议答案中的 cmets 的正确答案:
e.offsetX = e.touches[0].pageX - e.touches[0].target.offsetLeft;
e.offsetY = e.touches[0].pageY - e.touches[0].target.offsetTop;
这会忽略任何转换,例如旋转或缩放。另外一定要检查是否有任何接触。
【讨论】:
在 canvas 元素上使用 jQuery 的 .on 函数绑定事件处理程序时遇到类似问题(不知道原因)。
我通过使用addEventListener 绑定事件处理程序解决了这个问题。处理程序中的event 对象已使用正确的值定义了 offsetX 和 offsetY。
希望对你有帮助...
【讨论】:
Touch 对象没有offsetX 和offsetY,至少根据规范。您的回答表明您确实得到了它们,我想知道如何。
可以使用clientX或pageX,见here
【讨论】: