【问题标题】:How can I get e.offsetX on mobile/iPad如何在移动设备/iPad 上获取 e.offsetX
【发布时间】:2012-07-02 12:36:21
【问题描述】:

当我在 iPad 上尝试时,e.touches[0] 中没有 offsetX。有谁知道我在哪里可以得到这个 offsetX 的值?

【问题讨论】:

    标签: javascript ipad events


    【解决方案1】:

    谢谢,@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;
    }
    

    【讨论】:

      【解决方案2】:

      页面 - 偏移量/客户端方法对我不起作用。仍然有一个偏移量。我发现这个完美的解决方案:

      let r = canvas.getBoundingClientRect();
      
      let x = e.touches[0].pageX - r.left;
      let y = e.touches[0].pageY - r.top;
      
      

      【讨论】:

        【解决方案3】:

        基于建议答案中的 cmets 的正确答案:

        e.offsetX = e.touches[0].pageX - e.touches[0].target.offsetLeft;     
        e.offsetY = e.touches[0].pageY - e.touches[0].target.offsetTop;
        

        这会忽略任何转换,例如旋转或缩放。另外一定要检查是否有任何接触。

        【讨论】:

          【解决方案4】:

          在 canvas 元素上使用 jQuery 的 .on 函数绑定事件处理程序时遇到类似问题(不知道原因)。

          我通过使用addEventListener 绑定事件处理程序解决了这个问题。处理程序中的event 对象已使用正确的值定义了 offsetX 和 offsetY。

          希望对你有帮助...

          【讨论】:

          • 你能说得更详细些吗?
          • @tremby 你想知道什么具体的?
          • 我只是不明白你的回答。据我所知,Touch 对象没有offsetX 和offsetY,至少根据规范。您的回答表明您确实得到了它们,我想知道如何。
          【解决方案5】:

          可以使用clientX或pageX,见here

          【讨论】:

          • 是的,我明白了,谢谢。我找到了一种获取 e.offsetX 的方法。 e.offsetX = e.touches[0].pageX - e.touches[0].target.offsetLeft; e.offsetY = e.touches[0].pageY - e.touches[0].target.offsetTop;我觉得和 e.offsetX 一样
          • 这不考虑元素上的任何变换,比如旋转或缩放,就像 offsetX 一样。 offsetX 给出了元素局部坐标系中的坐标,似乎是在转换之前。
          猜你喜欢
          • 2018-04-14
          • 2016-03-07
          • 2019-11-10
          • 2017-11-14
          • 2019-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多