您可以通过使用两个 CSS 类来完成此操作,一个将其设置timing-duration
为 0,另一个将其设置为 200 毫秒,然后在 JS 中以编程方式应用这些类。以这个JSFiddle为例。
Web 开发的最佳实践之一是将文档的各个部分分成结构/内容 (HTML)、演示文稿 (CSS) 和交互/行为 (JS)。在上面的示例中,内容的呈现(定时翻译)保持在 CSS 中定义,而 JS 仅用于响应交互(MouseClick 事件)。
您应该能够transform-origin
使用WebkitTransformOrigin
JS 中的 style 属性更改元素。这是一个示例JSFiddle。我在我的 iPhone4 上对此进行了测试,它在控制台中正确记录了新的转换原点。同样,这也可以通过仅使用 JS 来监听手势事件并更新元素的类来实现,同时保持表示逻辑 (CSS) 中定义的类的样式规则。
请注意:在我的示例中,我正在更新元素的 .className。由于您的元素可能已经有很多类,您可能需要实现 addClass/removeClass 函数来正确设置正确的类,其中几个示例可以在 Web 上找到。
更新:
抱歉耽搁了……有两种方法可以解决这个问题,第一种方法你已经发现了。
处理切换回类名的另一种方法是使用webkitTransitionEnd
属性。每当元素上的转换完成时都会触发。它看起来像这样:
document.getElementById('puck').addEventListener('webkitTransitionEnd', function() {
puck
.removeClass('without_transition')
.addClass('with_transition')
}, false);
不幸的是,当该transition-duration
属性设置为 0 时,不会触发此事件 :( 我不确定这是设计使然还是错误,但这就是它当前的实现方式(尽管我猜这是设计使然)点浏览器并没有真正进行转换,而只是应用转换)。这种方法的解决方法是将 设置transition-duration
为 1ms(这基本上看起来是即时的)。
虽然 setTimeout 方法看起来很老套,但许多移动框架组在整个代码中都使用它,因为该函数将在切换类发生转换后触发(类似于 transitionEnd)。看看 Sencha Touch,你会发现它无数次。
我已经分叉了你的 JSfiddle 在这里展示我的例子。