【问题标题】:Disable scroll/swipe action for html canvas drawing on ios禁用 ios 上 html 画布绘图的滚动/滑动操作
【发布时间】:2018-08-09 09:16:59
【问题描述】:

我有一个 html 画布,可以在上面绘制鼠标和触摸事件。

我在画布上使用 css touch-action: none 样式来禁止设备在绘图时滚动。

但它只适用于非 IOS 设备。在 IOS 设备上的任何浏览器上,它仍然会执行滚动/滑动操作,并且很难正确绘制。

这似乎是一个 IOS 功能。一个可以轻松适应屏幕的网页仍然可以滚动/滑动。

有什么办法可以解决这个问题?

【问题讨论】:

标签: html ios canvas


【解决方案1】:

在自己遇到这个问题一年后,我终于设法解决了。

解决方案:处理画布元素上的 touchstart、touchmove、touchend、touchcancel 事件,并调用 event.preventDefault()。如果它在画布元素之外冒泡,它将滚动。

例子:

var canvas_dom = // make this your canvas DOM element
canvas_dom.addEventListener("touchstart",  function(event) {event.preventDefault()})
canvas_dom.addEventListener("touchmove",   function(event) {event.preventDefault()})
canvas_dom.addEventListener("touchend",    function(event) {event.preventDefault()})
canvas_dom.addEventListener("touchcancel", function(event) {event.preventDefault()})

【讨论】:

  • 这段代码是放在html文件还是js文件?对不起,菜鸟。
【解决方案2】:

您能否验证此页面是否适合您? http://bencentra.com/code/2014/12/05/html5-canvas-touch-events.html

这在我的 iOS 上运行良好,直到更新 11.3。更新后,拖动时画布始终滚动。在其他操作系统中,解决方案是touch-action:none,或者在 Javascript 世界中:event.preventDefault()。但是,正如您在上面页面后面的代码中看到的那样,Javascript 选项不起作用。

附:我不能强调这曾经在 iOS 11.3 更新之前工作。

【讨论】:

  • 我正在尝试做与 OP 相同的事情。您链接的网站不起作用,但是 https://drawisland.com/iphonehttps://quickdraw.withgoogle.com/ 工作正常。我从他们的角度猜测它需要某种嵌套,画布和 div 具有奇怪的位置:值。
  • 仅供参考,preventDefault 将起到一半的作用。对于 iOS 11.3+:另见 stackoverflow.com/questions/49854201/…
  • Safari 发行说明似乎解开了这个谜团。默认情况下,root 上的侦听器是被动的,因此您的解决方案(使它们不是被动的)和我的解决方案(不要将它们放在 root 上)都可以解决问题。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多