2017-01-19 25 views
2

Я использую Ember-Gestures, который реализует Hammer.js в приложении Cordova, чтобы реализовать некоторые простые элементы управления жестов.Как я могу использовать Hammer JS жест жесткого диска на iOS без прокрутки страницы?

Я столкнулся с серьезной проблемой, при которой любой жест, который запускает анимацию (переход, преобразование, анимацию SVG), если экран прокручивает любую сумму, эта анимация замерзнет и будет в конечном состоянии при завершении прокрутки , В частности, у меня есть элемент на вертикально прокручиваемой странице, который должен (в идеале) быть укорененным и расширяться, чтобы развернуть его на несколько элементов или обратно в один.

Мне известно, что в качестве оптимизации iOS зависает вся анимация во время прокрутки. Однако, поскольку жесты с щепоткой и салфетками могут слегка прокручивать экран, это ужасно для пользователя, потому что сложные переходы могут быть полностью заморожены, если пользователь промахется, например, чуть вверх и влево, а не прямо слева.

Я пробовал несколько решений для рендеринга во время прокрутки, таких как here, но они, похоже, не работают на современных версиях iOS. Я также попробовал метод hammerJS e.preventDefault(), чтобы заморозить скроллинг во время жестов, называемых через расширение Эмбер-жесты, так что мой метод выглядит следующим образом:

swipeLeft(e) { 
    e.originalEvent.gesture.srcEvent.preventDefault() 
    // Do stuff 
}, 

... но это не имеет какого-либо заметного эффект. (Может быть, есть что-то здесь не так? gesture не имело preventDefault() метода сам, и Эмбер-жесты, кажется, пытаются абстрагироваться некоторые из этого отеля.

Есть ли способ, я могу либо сохранить анимацию рендеринг во время прокрутки (это кажется маловероятным), или поочередно останавливать прокрутку страницы перед выполнением анимации (и предотвращать ее прокрутку во время ее выполнения)?

В любом случае, я могу добавить ограничения на то, что интерпретируется как «щепотка» или «салфетки», так что те, которые также будут интерпретироваться как жесты прокрутки, исключаются.

ответ

0

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

я подозреваю, что может быть более элегантным решением там, но с целью отключения случайной прокрутки, зажимая так что D3.js анимация не будет замерзать на полпути, это было быстрое и эффективное исправление.