Это можно сделать с помощью двух классов CSS, один из которых устанавливает timing-duration
в 0, а другой - 200 мс, а затем применяет классы программно в JS. Взгляните на это JSFiddle для примера.
Одной из лучших практик веб-разработки является разделение частей вашего документа на структуру / контент (HTML), презентацию (CSS) и взаимодействие / поведение (JS). В приведенном выше примере представление содержимого (синхронный перевод) остается определенным в CSS, а JS используется только для ответа на взаимодействие (событие MouseClick).
Вы можете изменить элемент transform-origin
, используя свойство стиля WebkitTransformOrigin
в JS. Вот пример JSFiddle . Я проверил это на своем iPhone4, и он правильно зарегистрировал новые источники трансформации в консоли. Опять же, этого также можно достичь, используя JS только для прослушивания событий жестов и обновления класса элемента, сохраняя при этом правила стиля класса, определенные в логике представления (CSS).
Обратите внимание: в моих примерах я обновляю элемент .className. Поскольку у ваших элементов уже может быть много классов, вам может понадобиться реализовать функции addClass / removeClass, чтобы правильно установить правильные классы, несколько примеров которых можно найти в Интернете.
Обновление:
Извините за задержку ... Есть два способа решения этой проблемы, и первый, который вы уже обнаружили.
Другим способом обработки обратного имени класса является использование свойства webkitTransitionEnd
. Это срабатывает всякий раз, когда переход на элементе заканчивается. Это будет выглядеть так:
document.getElementById('puck').addEventListener('webkitTransitionEnd', function() {
puck
.removeClass('without_transition')
.addClass('with_transition')
}, false);
К сожалению, когда свойство transition-duration
установлено в 0, это событие не вызывается :( Я не уверен, что это из-за замысла или из-за ошибки, но это только то, как это в настоящее время реализовано (хотя я предполагаю, это дизайн, так как на данный момент браузер не на самом деле делает переход, а скорее просто применяет преобразование.) Обходной путь в этом подходе состоит в том, чтобы установить transition-duration
в 1 мс (что, по сути, будет выглядеть мгновенно) .
Хотя подход setTimeout выглядит хакерским, многие мобильные каркасные группы используют его в своем коде, поскольку функция будет запускать после перехода, происходящего из переключения классов (аналогично transitionEnd). Взгляните на Sencha Touch, и вы найдете его много раз.
Я разбудил твой JSfiddle, чтобы показать мой пример здесь .