2017-09-27 76 views
1

如何通过触摸xterm.js禁用滚动?在xterm.js中禁用触摸滚动

我在term.element上触摸移动事件,通过滑动相应方向来模拟光标键。这适用于使用“备用屏幕缓冲区”的应用程序,例如Midnight Commander,但在具有滚动回退的默认屏幕缓冲区(例如,lynx或bash)中,它除了滚动终端(像通常那样)发送箭头键的ansi代码。

我需要重写此行为,因此在滑动时不会发生滚动,也不会阻止通过其他方式(例如鼠标滚轮或滚动条)进行滚动,也不会干扰其他鼠标事件(以及可能的触摸事件)。

对事件尝试了preventDefault(),甚至尝试将它附加到终端,parentNode和它的parentNode中的各种元素。同样的行为。也试过位置:绝对底部:0px,但是xterm.js模拟终端的方式可以产生异常结果。

任何想法?

+0

尝试使用附加touchmove的覆盖div代替。这解决了滚动问题,但阻止其他事件。是否可以捕捉叠加层上的触摸移动,同时允许其他事件通过? – jdmayfield

回答

0

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

我想补充,如果你只是想禁用触摸滚动终端上的所有你需要的是:

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

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