0

我有一个由 4 个 div 组成的垂直堆栈(带有“eachthumb”类),绝对放置,我试图让它们模拟类似轮播的行为。所有四个 div 都向上移动,然后顶部的一个移动到底部。从上数第二个有一类'currindex'。有两个变量,值介于 0 和 3 之间,表示正在移动的 div 的数据索引值(称为 mover),以及从顶部数第二个的 div(newnow)。我无法显示我的所有代码,但这是我认为很麻烦的部分:

$('.eachthumb').animate({top: "-=110px"},200);
$('.eachthumb').removeClass('currindex');
$(".eachthumb[data-index='" + newnow +"']").addClass('currindex');
$(".eachthumb[data-index='" + mover +"']").css("top", "342px");

div 按预期向上移动,currindex 类按预期传递给新 div。但是,最后一行似乎没有执行。

我想知道这些语句是否执行得太快,或者是否需要将最后一条语句设置为 animate 语句的回调。我不知道它是否有区别,但“顶部”值是内联样式,而不是样式表样式。或者这可能是我没有看到的语法问题。无论如何,如果您有任何想法要分享,那就太好了。

编辑:

这里还有一些代码。这包括生成 HTML 的 smarty 模板代码和所有脚本。如您所见,所讨论的迷你轮播是作为来自主旋转器的回调触发的,主旋转器是Flux Slider。你可能会注意到有两个对 mouseenter/mouseleave 函数的调用——我注意到当 'currindex' 类被重新分配给一个新元素时,效果被破坏了。

{*debug*}

<div id="fluxslider">
{foreach from=$events item=event}
    <img src="{$event.tf_photo}" alt="{$event.name}" data-value="{$evt.id}"/>
{/foreach}
</div>
<div class="fluxtopfade"></div>
<div class="fluxbotfade"></div>
<div id="fluxthumbs">
    {foreach from=$events item=thumb name=thumb}
        <div class="eachthumb{if $smarty.foreach.thumb.index eq 0} currindex{/if}" data-index="{$smarty.foreach.thumb.index}">
            <img src="{$thumb.tf_photo}" />
            <div class="evtinfo invisible">
                <h5>
                    {if $thumb.date_start|date_format:"%b-%d" != $thumb.date_end|date_format:"%b-%d"}
                        {if $thumb.date_start|date_format:"%b" != $thumb.date_end|date_format:"%b"}
                            {$thumb.date_start|date_format:"%b %d"} - {$thumb.date_end|date_format:"%b %d, %Y"}
                        {else}
                            {$thumb.date_start|date_format:"%B %d"} - {$thumb.date_end|date_format:"%d, %Y"}
                        {/if}
                    {else}
                        {$thumb.date_start|date_format:"%B %d, %Y"}
                    {/if}
                </h5>
                <p>{$thumb.date_start|date_format:"%l:%M %p"}</p>
                <a href="{$path_http}events/?evtid={$thumb.id}" class="amoreinfo">More Info</a>
                {if $event.custom.1.data.0}<a href="{$event.custom.2.data.0}" target="_blank" class="atickets">Buy Tickets</a>{/if}
            </div>
        </div>
    {/foreach}
</div>

<script src="{$path_http}css/flux.min.js"></script>
{literal}
    <script type="text/javascript">
        $(function(){
            $(".eachthumb[data-index='" + 3 +"']").css("top", "12px");
            $(".eachthumb[data-index='" + 0 +"']").css("top", "122px");
            $(".eachthumb[data-index='" + 1 +"']").css("top", "232px");
            $(".eachthumb[data-index='" + 2 +"']").css("top", "342px");
            window.myFlux = new flux.slider('#fluxslider', {
                controls: true,
                width: 736,
                height: 354,
                transitions: ['blinds'],
                delay: 20000,
                onTransitionEnd: function() {
                    var oldnow = $('.currindex').data('index');
                    console.log(oldnow);
                    if (oldnow == 3){
                        var newnow = 0;
                    } else {
                        var newnow = oldnow + 1;
                    }
                    if (oldnow == 0){
                        var rover = 3;
                    } else {
                        var rover = oldnow - 1;
                    }
                    $('.eachthumb').animate({top: "-=110px"},200);
                    $('.eachthumb').removeClass('currindex');
                    $(".eachthumb[data-index='" + newnow +"']").addClass('currindex');
                    $('.currindex').on('mouseenter',function(){
                        $(this).find('.evtinfo').removeClass('invisible');
                    });
                    $('.currindex').on('mouseleave',function(){
                        $(this).find('.evtinfo').addClass('invisible');
                    });
                    $(".eachthumb[data-index='" + rover +"']").css("top", "342px");
                }
            });
        });
        $(function(){
            $('.currindex').on('mouseenter',function(){
                $(this).find('.evtinfo').removeClass('invisible');
            });
            $('.currindex').on('mouseleave',function(){
                $(this).find('.evtinfo').addClass('invisible');
            });
        });
    </script>
{/literal}
4

3 回答 3

1

可能是您没有position:absolute为 css 中的元素声明。如果您尚未声明,则必须执行以下操作:

$(".eachthumb[data-index='" + mover +"']").css({"position":"absolute","top":"342px"});
于 2013-10-23T01:48:45.063 回答
1

这段代码最终起作用了。我认为它试图过早地调用 CSS 方法,可能在 animate 方法完成之前,它在洗牌中迷失了。将 CSS 方法放在回调函数中解决了这个问题。有趣的是,在我今天编写的另一个函数中,运动发生在动画之前,不需要回调。

$('.eachthumb').animate({top: "-=110px"},200, function(){
    $(".eachthumb[data-index='" + mover +"']").css("top", "342px");
}
于 2013-10-24T01:05:56.923 回答
-1

第一行是。

$('.eachthumb').animate({top: "-=110px"},200);

难道不应该...

$('.eachthumb').animate({top: "-110px"},200);
于 2013-10-23T04:59:44.517 回答