【问题标题】:Getting the correct coordinates of a canvas touch event获取画布触摸事件的正确坐标
【发布时间】:2013-06-18 09:34:15
【问题描述】:

我在获取触摸事件的正确坐标时遇到问题。这是我的标记

<div class="board">
<canvas width="595" height="595" id="bgCanvas"></canvas>
<canvas width="595" height="595" id="liCanvas"></canvas>
</div>

CSS

.board{
 width:595px;
 height:595px;  
 position:absolute;
 display:block;
 left:21px;
 top:230px;
}
.board canvas{
position:absolute;
}

和代码,请注意我已经将触摸事件监听器添加到 liCanvas

evX= ev.targetTouches[0].pageX- liCanvas.offsetLeft 

但我没有得到正确的值,我的意思是当我触摸画布的左上角时我想要 evX=0。请帮帮我

【问题讨论】:

  • 你得到了什么价值?
  • evX 得到 11,evY 得到 116。

标签: html canvas position


【解决方案1】:

当树状结构很简单时,公认的解决方案有效,但在某些情况下(例如我的),当可能有多个嵌套滚动父级时,它不会按预期工作。

另一种适用于我目前看到的所有情况的解决方案是使用

var rect = canvas.getBoundingClientRect();
evX = ev.targetTouches[0].pageX - rect.left,

【讨论】:

    【解决方案2】:

    offsetLeft 给出了元素相对于你的板的位置,但你想要它相对于身体,所以使用下面给出的代码

    function getOffsetLeft( elem )
    {
        var offsetLeft = 0;
        do {
          if ( !isNaN( elem.offsetLeft ) )
          {
              offsetLeft += elem.offsetLeft;
          }
        } while( elem = elem.offsetParent );
        return offsetLeft;
    }
    
    evX= ev.targetTouches[0].pageX- getOffsetLeft(liCanvas); 
    

    Reference

    【讨论】:

    • 非常感谢 Ankit.. 过去四天我被困在那里
    • @LamiaMehreen 如果它真的对你有帮助,那么你可以通过勾选答案左侧的标记来接受它
    • 对不起,我确实勾选了箭头,但它没有正常工作..抱歉没有注意到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2011-02-25
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多