Как повторить (цикл) Jquery fadein - fadeout - fadein - PullRequest
4 голосов
/ 17 февраля 2012

Я борюсь с моим первым скриптом jQuery. У меня есть DIV на моей странице, которая скрыта с помощью CSS. Затем у меня есть сценарий, который запускается, чтобы заставить его постепенно исчезать, затем исчезать снова:

<script type="text/javascript">
  (function($) {
    $(function() {
      $('#abovelogo').fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }); 
  })(jQuery);
</script>

Эта часть отлично работает. Теперь мой вопрос:

Как мне изменить это так, чтобы этот скрипт выполнял циклы (навсегда) вместо одного раза?

Заранее спасибо! -Nate

Ответы [ 3 ]

21 голосов
/ 17 февраля 2012

Поместите свой код в setInterval:

$(function () {
    setInterval(function () {
        $('#abovelogo').fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }, 5000);
});

Поскольку вы будете запускать его до тех пор, пока страница активна, вам следует сделать все возможное для оптимизации кода, например, вы можетекэшировать выделение вне интервала:

$(function () {
    var $element = $('#abovelogo');
    setInterval(function () {
        $element.fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }, 5000);
});

Документы для setInterval: https://developer.mozilla.org/en/window.setInterval

Кроме того, вместо использования .delay() вы можете использовать функции обратного вызова в каждой анимации длявызывать одну анимацию за другой:

$(function () {
    var $element = $('#abovelogo');
    setInterval(function () {
        $element.fadeIn(1000, function () {
            $element.fadeOut(1500, function () {
                $element.fadeIn(1500)
            });
        });
    }, 5000);
});

Вот пример: http://jsfiddle.net/xsATz/

Вы также можете использовать setTimeout и рекурсивно вызывать функцию:

$(function () {
    var $element = $('#abovelogo');
    function fadeInOut () {
        $element.fadeIn(1000, function () {
            $element.fadeOut(1500, function () {
                $element.fadeIn(1500, function () {
                    setTimeout(fadeInOut, 500);
                });
            });
        });
    }

    fadeInOut();
});

Вот демо: http://jsfiddle.net/xsATz/1/

1 голос
/ 19 февраля 2013

У меня есть некоторые проблемы с методом setTimeout. Может быть, лучше с «триггером»:

var $element = $('.banner');
$element.bind('cusfadeOut',function() {
        $(this).fadeOut(500,function() {
                $(this).trigger('cusfadeIn');
        });
});
$element.bind('cusfadeIn',function() {
        $(this).fadeIn(1000, function() {
                $(this).trigger('cusfadeOut');
        });
});
$element.trigger('cusfadeOut');
1 голос
/ 17 февраля 2012
<script type="text/javascript">
function doFade() {
    $('.foo').toggleClass('fooAct');
    setTimeout(doFade, 1000);
}
$(document).ready(function(){
    doFade();
});
</script>
<style>
div {
height:200px;
background:black;   
}
.foo {
transition: opacity 2s;
-moz-transition: opacity 2s; /* Firefox 4 */
-webkit-transition: opacity 2s; /* Safari and Chrome */
-o-transition: opacity 2s; /* Opera */
opacity:0.1;
}
.fooAct {
opacity:1;
}
</style>
<div class="foo"></div>

только для фантазии. Вы можете сделать это с помощью css3. Я надеюсь, что это может помочь вам тоже. Делая такие вещи, css должен быть более удобен для работы браузера, а не jQuery.

...