我使用jquery循环创建了一个幻灯片,每个幻灯片包含包含图像和文本的子div,并且想知道是否可以在每个幻灯片显示后使用其中一个子div中的文本设置动画'onAfter'。基本上我想知道在幻灯片完成后是否可以在幻灯片div中为动画制作动画。一旦幻灯片显示,我似乎无法发生任何事情或动画。
//Run the slide show:
$('#slide').cycle({
fx: 'fade',
timeout: 1000,
after: onAfter,
});
//function to animate element within the '#slide' div after slide is rotated in
function onAfter() {
$('#slide div .right').animate({
easing: 'linear',
//shrink the font size down
fontSize : '18px',
}, 2000, function() {
// Animation complete.
});
};
这是html:
<div id="slide">
<div><!--slide 1-->
<div class="left"><img src="images/theimage1.jpg" alt="An Image" /></div>
<div class="right">this is the text I want to animate once the slide is shown</div>
</div>
<div><!--slide 2-->
<div class="left"><img src="images/theimage2.jpg" alt="An Image" /></div>
<div class="right">animate more text once this slide is displayed</div>
</div>
<div><!--slide 3-->
<div class="left"><img src="images/theimage3.jpg" alt="An Image" /></div>
<div class="right">animate this text when slide 3 is shown</div>
</div>
</div><!--end #slide -->
这是css:
<style type="text/css" media="all">
#slide { width: 950px; border: none; background-color: #fff; }
#slide div { width: 100%; }
#slide div .left {float: left; width: 350px; padding: 0;}
#slide div .right {float: right; color: #666; font-size: 40px; width: 560px; }
</style>
答案 0 :(得分:1)
我找到了一个有效的解决方案,尽管它可能不是最佳解决方案。
看起来您提供的代码几乎就是您所需要的。因为它对我来说是第一张幻灯片,但不适用于后续幻灯片。原因是onAfter函数选择所有“.right”div来设置动画。因此,第一次运行所有“.right”div都处于最终状态,因此再次运行它没有任何效果(你告诉每个人从18px动画到18px)。因此,关键是将文本重置为原始大小,以便缩小,但仅适用于即将发布的幻灯片。
为此,您可以使用插件的“before”和“after”回调各自发送几个参数,其中包括“currSlideElement”和“nextSlideElement”作为前两个参数(您可以看到我如何将这些参数合并到代码中下面)。首先是一个快速的注意事项:“后”回调似乎接收前一个元素和当前元素,而不是插件的文档所述的当前和下一个元素。我不确定这是插件中的错误还是文档中的错误,或者可能(更有可能),我只是误解了一些东西。无论哪种方式,我们都可以让它发挥作用......
所以唯一的变化如下: 我在回调幻灯片之前添加了一个:
$('#slide').cycle({
fx: 'fade',
timeout: 5000,
before: onBefore,
after: onAfter
});
以下是回调:
function onBefore(currentElement, nextElement) {
$(nextElement).find('.right').css({fontSize: '40px'}); // reset css for upcoming text
}
function onAfter(previousElement, currentElement) {
// Note: Plugin documentation says parameters should be (currentElement, nextElement), but that doesn't seem to be the case!
$(currentElement).find('.right').animate({fontSize: '18px'}, 2000); // animate current text
};
希望有所帮助(如果我过度解释,请原谅我...希望它能帮助其他读者,如果有的话)。
干杯。