【问题标题】:How can I allow two-finger scrolling over an HTML canvas element while allowing one-finger drawing?如何在允许单指绘图的同时允许两指滚动 HTML 画布元素?
【发布时间】:2024-04-12 11:40:02
【问题描述】:

我正在尝试使用固定大小的画布制作画布绘图应用程序 - 但能够在画布上滚动以在根据用户的屏幕尺寸可能不可见的不同点上进行绘制。

它可以在桌面上滚动,但我正在尝试在移动设备上实现两指滚动。

http://jsbin.com/qugabuh/edit

在我的触控绘图功能中,我尝试了以下方法:

const startTouch = function(e) {
  if (e.targetTouches.length < 2) {
    ctx.beginPath();
    x = e.changedTouches[0].pageX + content.scrollLeft;
    y = e.changedTouches[0].pageY - 34 + content.scrollTop;
    ctx.moveTo(x, y);
  }
};

const moveTouch = function(e) {
  if (e.targetTouches.length < 2) {
    e.preventDefault();
    x = e.changedTouches[0].pageX + content.scrollLeft;
    y = e.changedTouches[0].pageY - 34 + content.scrollTop;
    ctx.lineTo(x, y);
    ctx.stroke();
  }
};

这在我的 Android 平板电脑上似乎可以正常工作(尽管如果我不同时抬起两个手指,有时会画线),但在我的 iPhone 上根本不行。

【问题讨论】:

  • 我面临同样的问题。你找到解决办法了吗?
  • @JayPatel 你找到什么有用的了吗?
  • @JayPatel 我相信是这样,但已经很长时间了,我不能肯定地说。如果我这样做了,它就存在于此处:github.com/CollaBoard
  • 这能回答你的问题吗? Scroll vertically with two fingers

标签: javascript canvas html5-canvas touch


【解决方案1】:

尝试使用标志来控制开始事件的触摸。

    const startTouch = function(e) {
        if (e.target === canvas && e.touches.length === 1) {
            ctx.beginPath();
            x = e.changedTouches[0].pageX + content.scrollLeft;
            y = e.changedTouches[0].pageY - 34 + content.scrollTop;
            ctx.moveTo(x, y);
            
            drawable = true;
        }else{
            drawable = false;
        }
    };

看: https://codepen.io/Luis4raujo/pen/RwoZVXE

【讨论】:

  • CodePen 不工作,moveTouch 的上下文丢失。我建议添加它。
最近更新 更多