2013-12-23 7 views
0

Я пытаюсь воспроизвести короткую анимацию в стиле рекламы, когда пользователи прокручиваются вниз до определенного элемента на странице. Идея заключалась бы в непрерывном цикле, пока определенная область страницы видна, и предпочтительно приостанавливать ее, когда это не так.Функция Loop в jQuery, пока элемент виден

То, что я до сих пор:

(function($){ 
    $.fn.splash = function() { 
    $(".lb").fadeIn("slow"); 
    $(".button").delay(200).fadeIn("slow"); 
    $(".t1").animate({left:"-=300"},1000); 
    $(".t2").delay(500).animate({left:"-=300"},1000); 
    $(".t3").delay(1000).animate({left:"-=300"},1000); 
    $(".t1").delay(2800).animate({left:"-=400"},400); 
    $(".t2").delay(2350).animate({left:"-=400"},400); 
    $(".t3").delay(1900).animate({left:"-=400"},400); 
    $(".t4").delay(3800).animate({left:"-=300"},1000); 
    $(".t5").delay(4000).animate({left:"-=300"},1000); 
    $(".t4").delay(3000).animate({left:"-=400"},400); 
    $(".t5").delay(2900).animate({left:"-=400"},400); 
    $(".t6").delay(7500).animate({left:"-=300"},1000); 
    $(".t7").delay(7700).animate({left:"-=300"},1000); 
    $(".t6").delay(3000).animate({left:"-=400"},400); 
    $(".t7").delay(2900).animate({left:"-=400"},400); 
    $(".t8").delay(11500).animate({left:"-=300"},1000); 
    $(".t8").delay(5000).animate({left:"-=400"},400); 
    $(".arrow").delay(12000).fadeIn(400); 
    $(".button").delay(11500).animate({top:"-=30"},700); 
    $(".arrow").delay(5000).animate({left:"-=400"},400); 
    $(".button").delay(4600).animate({left:"-=400"},400); 
    setTimeout(splash(), 18000); 
    }; 
})(jQuery); 


$(window).scroll(function() { 
    if ($('#splash').is(':visible')) { 
    $('#splash').splash(); 
    } 
}); 

Это начинает играть функцию, когда #splash ДИВ виден, но не цикл его. Как я могу заставить это работать?

(Это даже лучший способ выложить весь этот анимационный код?)

Благодаря

+0

В этом SetTimeout вы не может просто вызвать splash() и ожидать, что JS узнает, что вы хотите назвать. '$ (this) .splash();' или '$ ('# splash'). splash();' но не просто 'splash()'; – Popnoodles

ответ

1
var Interval=''; 
$(window).scroll(function() { 

if ($('#splash').is(':visible')) { 
    clearInterval(Interval); 
    Interval = setTimeout(function(){ 
     if($('#splash').is(':visible'))$('#splash').splash(); 
     else clearInterval(Interval); 
    },75); 
    } 
}); 

установленное время, как вы хотите (вместо 75)

+0

+1 это имеет больше смысла, но есть еще вызов для всплеска() слева в функции, которая будет ошибкой. – Popnoodles

+0

Я пробовал, но это все еще не повторяется. Должен ли я поддерживать setTimeout в функции всплеска? Если это так, нужно будет 'setTimeout (« $ (this) .splash() », 18000);'? –

Смежные вопросы