IOS 13 не вызывает события панели при изменении направления панорамирования - PullRequest
1 голос
/ 25 сентября 2019

У меня есть пользовательский слайдер изображений с использованием событий Hammer.js.

Я использую следующее для создания моего объекта «молот»:

    const hammerPan = new Hammer(domElement, 
    {
        // lock vertical scrolling when panning left to right
        touchAction: 'pan-y',

        recognizers: [
            // we don't care about vertical, but we want always to get panstart and panend
            // events so we use ALL to prevent unncesessary filtering from hammerjs
            [Hammer.Pan, { direction: Hammer.DIRECTION_ALL, threshold: 10 }]
        ]
    });

Слайдер (как и большинство слайдеров) перемещаетсяслева направо, но чтобы избежать блокировки вертикальной прокрутки на мобильных устройствах, я использую touchAction: 'pan-y', поэтому я все еще могу прокручивать.

В IOS 12 все работало просто отлично - , даже если я панорамировал влево, а затем переместил свойпалец вверх, прежде чем отпустить.Это вызовет некоторые события вертикального панорамирования, но все равно будет заканчиваться панелью .

С IOS 13 (и у меня есть два телефона для сравнения) это не даст мне окончательное событие panend, поэтому мои слайды будутзастрять на полпути.

1 Ответ

1 голос
/ 25 сентября 2019

Извините синтаксис RxJS, если он вам незнаком, но все, что мне нужно было сделать, это явно добавить событие pancancel.

const panUnfilteredRaw$ = fromEvent<HammerInput>(hammerPan as unknown as JQueryStyleEventEmitter, 
                          'panstart panmove panend pancancel').pipe(share());

У меня раньше этого не было, потому что я либо скопировал его откуда-то, или я просто никогда не думал, что мне это нужно.

Не уверен, что IOS13 более или менее требователен (!), но он определенно ведет себя иначе, если вы меняете направление панорамирования - так что, возможно, это ошибка.


Я также переключился с обнаружения panend на event.isFinal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...