在 xterm.js 中禁用触摸滚动

Disable touch scrolling in xterm.js

如何禁用触摸 xterm.js 上的滚动?

我在 term.element 上有一个 touchmove 事件,它通过向适当的方向滑动来模拟光标键。这在使用 "alternate screen buffer" 的 Midnight Commander 等应用程序中效果很好,但在具有回滚功能的默认屏幕缓冲区(例如,lynx 或 bash)中,它会滚动终端(就像通常那样) ) 除了发送箭头键的 ANSI 代码。

我需要覆盖此行为,以便在滑动时不会发生滚动,而不会阻止通过其他方式(例如鼠标滚轮或滚动条)进行滚动,或干扰其他鼠标事件(可能还有触摸事件)。

尝试对事件进行 preventDefault(),甚至尝试将其附加到终端、parentNode 及其父节点中的各种元素。相同的行为。还尝试了 position: absolute 和 bottom: 0px,但是 xterm.js 模拟终端的方式会导致异常结果。

有什么想法吗?

好的。解决方案是:在 touchmove 事件的处理程序顶部添加 event.stopPropagation() 。将它附加到终端元素(即 term.element)。忘记叠加层、指针事件:none 等。工作完美。没有额外的垃圾。我出于另一个原因留在 event.preventDefault() 中,但我认为只有 stopPropagation 独立解决这个特定问题。

我想补充一点,如果你只想在终端上禁用触摸滚动,你只需要:

term.addEventListener('touchmove',函数(e){e.stopPropagation()});

假设您的终端对象的名称是 'term'。