如何使用 animated.css 同时在两个元素上应用动画
How to apply animations on two elements at once with animated.css
我正在制作一个简单的幻灯片放映,其中每张幻灯片都有自己的持续时间。
我想通过在当前和下一张幻灯片上添加和删除 类,使用 animate.css 在幻灯片之间添加过渡。
我的问题是 - 使用我目前的方法 - 只有下一张幻灯片会被动画化(它滑入)但当前的幻灯片只是消失而没有任何动画。
我试图检测当前动画的结尾,然后更改 (adding/removing) 类 但在那种情况下,幻灯片之间存在巨大差距...
如何确保同时播放两个动画?`
var slides = $this.find('.slide');
slideIt = function(time) {
setTimeout(function() {
var duration = slides.eq(nextSlide).data('duration');
slides.eq(currentSlide)
.removeClass(animateIn)
.addClass(animateOut)
.hide();
slides.eq(nextSlide)
.removeClass(animateOut)
.addClass(animateIn)
.show();
slideIt(duration);
currentSlide = nextSlide; nextSlide ++;
if (nextSlide == slidesLength) { nextSlide = 0;}
},time);
};
提前感谢您的帮助!
Ps.: 打字时 post 我意识到它一定是 .hide() 但没有它只显示第一张幻灯片。
两个不同元素上的原生 CSS 动画应该总是同时 运行。
但是如果你隐藏一个元素,它甚至在动画开始之前就消失了。你必须为此添加一个计时器。
slides.eq(currentSlide)
.removeClass(animateIn)
.addClass(animateOut);
// save the jQuery instance of the element that should be hidden.
var $currentSlide = slides.eq(currentSlide);
// hide this element later
setTimeout(function() {
$currentSlide.hide();
}, 1000); // 1000 for 1000ms, replace that with the duration of the animateOut animation
如果我的第一个答案不能让你满意,因为你想在 CSS 方面解决这个问题,当有第二种方法时:
- 删除 JavaScript 中的
.hide()
。
- 确保你的 CSS 动画以一个状态结束,那里的元素再也看不到了(比如
transform: scale(0)
或 left: -100%
)。
- 保持 CSS 动画的最终状态。为此,请参阅:Maintaining the final state at end of a CSS3 animation
我正在制作一个简单的幻灯片放映,其中每张幻灯片都有自己的持续时间。 我想通过在当前和下一张幻灯片上添加和删除 类,使用 animate.css 在幻灯片之间添加过渡。 我的问题是 - 使用我目前的方法 - 只有下一张幻灯片会被动画化(它滑入)但当前的幻灯片只是消失而没有任何动画。 我试图检测当前动画的结尾,然后更改 (adding/removing) 类 但在那种情况下,幻灯片之间存在巨大差距...
如何确保同时播放两个动画?`
var slides = $this.find('.slide');
slideIt = function(time) {
setTimeout(function() {
var duration = slides.eq(nextSlide).data('duration');
slides.eq(currentSlide)
.removeClass(animateIn)
.addClass(animateOut)
.hide();
slides.eq(nextSlide)
.removeClass(animateOut)
.addClass(animateIn)
.show();
slideIt(duration);
currentSlide = nextSlide; nextSlide ++;
if (nextSlide == slidesLength) { nextSlide = 0;}
},time);
};
提前感谢您的帮助!
Ps.: 打字时 post 我意识到它一定是 .hide() 但没有它只显示第一张幻灯片。
两个不同元素上的原生 CSS 动画应该总是同时 运行。 但是如果你隐藏一个元素,它甚至在动画开始之前就消失了。你必须为此添加一个计时器。
slides.eq(currentSlide)
.removeClass(animateIn)
.addClass(animateOut);
// save the jQuery instance of the element that should be hidden.
var $currentSlide = slides.eq(currentSlide);
// hide this element later
setTimeout(function() {
$currentSlide.hide();
}, 1000); // 1000 for 1000ms, replace that with the duration of the animateOut animation
如果我的第一个答案不能让你满意,因为你想在 CSS 方面解决这个问题,当有第二种方法时:
- 删除 JavaScript 中的
.hide()
。 - 确保你的 CSS 动画以一个状态结束,那里的元素再也看不到了(比如
transform: scale(0)
或left: -100%
)。 - 保持 CSS 动画的最终状态。为此,请参阅:Maintaining the final state at end of a CSS3 animation