jQuery .css方法不执行

时间:2013-10-23 01:34:34

标签: jquery css

我有一个4个div的垂直堆栈(类'everythumb'),绝对放置,我试图让他们模仿类似旋转木马的行为。所有四个div向上移动,然后顶部的一个移动到底部。从顶部开始的第二个有一个'currindex'。有两个变量,其值介于0和3之间,表示正在移动的div(称为移动器)的数据索引值,以及将从顶部开始的第二个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语句的回调。我不知道它是否有所作为,但'top'值是内联样式,而不是样式表样式。或者它可能是我没有看到的语法问题。无论如何,如果你有任何想法分享,那就太好了。

编辑:

这是一些更多的代码。这包括生成HTML的智能模板代码和所有脚本。正如您所看到的,有问题的小型旋转木马是作为主旋转器的回调触发的,这是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}

3 个答案:

答案 0 :(得分:1)

您可能没有为css中的元素声明position:absolute。如果你还没有宣布那么你必须做这样的事情:

$(".eachthumb[data-index='" + mover +"']").css({"position":"absolute","top":"342px"});

答案 1 :(得分:1)

此代码最终正常运行。我认为它试图过早地调用CSS方法,也许是在animate方法完成之前调用它,并且它在shuffle中丢失了。将CSS方法放在回调函数中解决了这个问题。有趣的是,在我今天写的另一个函数中,运动在动画之前出现,不需要回调。

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

答案 2 :(得分:-1)

第一行是。

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

不应该......

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