Метод jQuery .css не выполняется

0

У меня есть вертикальный стек из 4 divs (с классом "everythumb"), который помещается абсолютно, и я пытаюсь заставить их подражать карусель-подобному поведению. Все четыре divs перемещаются вверх, а затем верхняя часть перемещается на дно. Второй из них имеет класс "currindex". Существуют две переменные, имеющие значение от нуля до трех, что означает значение индекса данных div, которое движется (называемое движителем), и div, который будет вторым сверху (newnow). Я не могу показать весь свой код, но вот часть, которая, как я считаю, хлопотала:

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

Дивы двигаются вверх, как ожидалось, и класс currindex передается новому div, как ожидалось. Однако конечная строка не выполняется.

Мне интересно, выполняются ли эти операторы слишком быстро или если последнее утверждение нужно настроить как обратный вызов для оператора animate. Я не знаю, имеет ли это значение, но "верхние" значения являются встроенными стилями, в отличие от стилей стилей. Или это может быть проблема синтаксиса, которую я просто не вижу. В любом случае, если у вас есть какие-то мысли поделиться, это было бы здорово.

Редактировать:

Вот еще код. Это включает в себя код шаблона smarty, который генерирует HTML и весь скрипт. Как вы можете видеть, мини-карусель, о котором идет речь, запускается как обратный вызов от главного ротатора, который является слайдером потока. Вы можете заметить, что есть два вызова функций 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}
  • 0
    ты можешь сделать скрипку?
  • 0
    Если он не работает, то либо элемент не имеет относительного или абсолютного положения, либо переменная вашего mover не поступает правильно, и селектор не может получить его. Мое предположение!
Теги:

3 ответа

1
Лучший ответ

Этот код закончил работу. Я думаю, что он пытался слишком рано называть метод CSS, возможно, до того, как был закончен метод анимации, и он потерялся в перетасовке. Помещение метода CSS в функцию обратного вызова решило эту проблему. Интересно, что в другой функции, которую я написал сегодня, в которой движение происходит до анимации, никакой обратный вызов не требуется.

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

Возможно, вы не указали position:absolute для элемента в css. Если вы еще не объявили, вам нужно сделать что-то вроде этого:

$(".eachthumb[data-index='" + mover +"']").css({"position":"absolute","top":"342px"});
  • 0
    .eachthumb {ширина: 229 пикселей; высота: 110px; положение: абсолютное; справа: 0px; }
  • 0
    Опубликуйте свой HTML-код ..
Показать ещё 1 комментарий
-1

Первая строка.

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

Не должно быть...

$('.eachthumb').animate({top: "-110px"},200);
  • 0
    Не обязательно ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню