Отключить сенсорную прокрутку в xterm.js

Как отключить прокрутку касанием на xterm.js?

У меня есть событие touchmove на term.element, которое имитирует клавиши курсора, проводя пальцем в соответствующем направлении. Это прекрасно работает в таких приложениях, как Midnight Commander, которые используют «альтернативный экранный буфер», но в экранном буфере по умолчанию, который имеет прокрутку (например, lynx или bash), он прокручивает терминал (как обычно) в дополнение к отправка кодов ansi для клавиш со стрелками.

Мне нужно переопределить это поведение, чтобы прокрутка не происходила при смахивании, не предотвращая прокрутку другими средствами, такими как колесико мыши или полоса прокрутки, или не мешая другим событиям мыши (и, возможно, событиям касания).

Пытался предотвратить событие по умолчанию(), даже пытался прикрепить его к различным элементам в терминале, parentNode и его parentNode. Такое же поведение. Также попробовал position: absolute с основанием: 0px, но то, как xterm.js имитирует терминал, приводит к искаженным результатам.

Любые идеи?


person jdmayfield    schedule 27.09.2017    source источник
comment
Вместо этого попробуйте оверлейный div с прикрепленным к нему touchmove. Это устраняет проблему с прокруткой, но блокирует другие события. Есть ли возможность захватить touchmove на оверлее, пропуская при этом другие события?   -  person jdmayfield    schedule 28.09.2017


Ответы (1)


В порядке. Решение: добавьте event.stopPropagation() вверху обработчика события touchmove. Прикрепите его к терминальному элементу (т.е. терминальному элементу). Забудьте о наложении, событиях указателя: нет и т. Д. Работает идеально. Без дополнительного мусора. Я оставил в event.preventDefault() по другой причине, но я думаю, что для этого конкретного вопроса стоит только stopPropagation.

Я хотел бы добавить, если вы просто хотите отключить сенсорную прокрутку на терминале, все, что вам нужно, это:

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

Предполагая, что имя вашего терминального объекта - «термин».

person jdmayfield    schedule 27.09.2017