使用jquery循环插件,在旋转后动画幻灯片中的元素

时间:2012-02-21 17:30:28

标签: jquery jquery-animate jquery-cycle

我使用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>

1 个答案:

答案 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
};

希望有所帮助(如果我过度解释,请原谅我...希望它能帮助其他读者,如果有的话)。

干杯。