如何使用元素上的指针事件禁用整个页面的滚动?

How to disable scroll of the whole page using pointer events on an element?

我有一个允许在 canvas 上绘图的库。目前,它支持鼠标和触摸事件。我也想添加对指针事件的支持。

我正在处理 canvas 元素上的 pointerdownpointermovepointerup 事件。当我使用鼠标时,在笔记本电脑上 Chrome 一切正常。但是,当我在我的平板电脑上试用它时,在获得 pointercancel 事件后跟 pointeroutpointerleave 之前,我只得到一些 pointermove 事件(2-5) .

我猜浏览器正在触发 pointercancel,因为将我的手指移到 canvas 上也会触发整个页面的滚动。

要在使用触摸事件时禁用滚动,我在 touchstarttouchmove 事件的处理程序中调用 event.preventDefault(),但此解决方案似乎不适用于指针事件。

如何在使用指针事件时在 canvas 元素上绘制时禁用整个页面的滚动?

你试过CSS属性touch-action: none了吗?它禁用元素上的任何类型的用户代理行为(如滚动)。

有关更细粒度的选项,请查看 touch-action 的 MDN 文章。