我如何确保这个CSS过渡动画
How can I ensure this CSS transition animates
我有一个图像旋转木马使用knockout &jquery。为了动画幻灯片,我真的想使用CSS过渡,而不是jquery动画。我几乎可以工作了,但我有一个问题。在下面的代码中,'slideRight'部分不起作用,但是else部分工作得很好。发生的事情是,即使已经添加了过渡类,也会跳过到margin-left 0的过渡。
if (slideRight) {
$(requestedElement).insertBefore(currentElement);
slideContainer.css('margin-left', -$(self.carousel).width());
slideContainer.addClass('transition');
slideContainer.css('margin-left', 0);
} else {
$(requestedElement).insertAfter(currentElement);
slideContainer.addClass('transition');
slideContainer.css('margin-left', -$(self.carousel).width());
}
我在这里创建了一个JSFiddle: http://jsfiddle.net/vnw57nx0/2/
正如您将在小提琴中看到的,旋转木马在从右到左的幻灯片之间很好地转换。
但是如果你在javascript中找到这一行:
self.setIndex(self.currentIndex() + 1);
并将其改为:
self.setIndex(self.currentIndex() - 1);
幻灯片应该反向循环。他们有,但他们没有被动画化。有趣的是,如果我调试脚本并逐步执行,它可以正常工作。这让我认为这是一个时间问题,也许我需要使用回调函数,但jquery . insertbefore, .css和。addclass都是同步的。
任何想法我可以如何修复这段代码,如果我调试,但不如果我不?
当您在同一上下文中恢复样式值时,浏览器似乎不会进行转换。您需要在新的上下文中使用setTimeout
:
if (slideRight) {
$(requestedElement).insertBefore(currentElement);
slideContainer.css('margin-left', -$(self.carousel).width());
setTimeout(function() {
slideContainer.addClass('transition');
slideContainer.css('margin-left', 0);
});
} else {
http://jsfiddle.net/vnw57nx0/3/我发现这个问题是因为Knockout标签,虽然你的问题中有Knockout参考,但问题与Knockout无关。事实上,你的代码是非常反knockout的,因为你使用jQuery选择器在你的"视图模型"和使用可观察对象,没有必要,甚至有用。
相关文章:
- 如何使用css动画/javascript使具有背景图像的元素出现
- 如何使用css动画从中心增加边界线
- 点击CSS动画
- 只在滚动时播放循环css动画-滚动停止时停止
- CSS动画暂停并使用javascript播放
- 使用javascript可以设置css动画的当前百分比
- 使用Jquery和'的CSS动画;.css'
- CSS动画背景图像的过渡越来越暗
- 单击css动画后丢失的事件
- CSS动画-显示和隐藏面板
- 更改javascript中的css动画
- Css动画-setTimeout没有't应用打断动画的更改
- firefox中的CSS动画不起作用
- 如何只有点击时才有CSS动画,而不是页面加载
- css动画和jquery.load()在移动设备上断断续续
- 如何在 CSS 动画遇到屏幕边缘时停止它
- CSS 动画将恢复为原始状态
- 通过javascript触发CSS动画
- CSS 动画在元素隐藏时暂停
- CSS 动画中的非动画帧序列