Прерывать и перезапускать последовательность событий setTimeout с помощью jquery?

#jquery #sequence #settimeout #interrupt

#jquery #последовательность #settimeout #прерывание

Вопрос:

Извините, если это не имеет смысла, я полный новичок!

По сути, я пытаюсь заставить последовательность текстов появляться, а затем исчезать один за другим, пока, наконец, не появится последний и останется статичным. Однако я хочу, чтобы последовательность прерывалась, если пользователь перемещает мышь / клавиатуру до появления последнего текста. Я бы хотел, чтобы появился текст «начать сначала», а затем последовательность, чтобы начать снова.

Это то, к чему я пришел на данный момент. Но я не уверен, как закодировать прерывание!

Javascript:

     $(document).ready(function() {

    setTimeout( "jQuery('#text1').fadeIn();",1000 );
    setTimeout( "jQuery('#text1').fadeOut();",5000 );
    setTimeout( "jQuery('#text2').fadeIn();",6000 );
    setTimeout( "jQuery('#text2').fadeOut();",10000 );
    setTimeout( "jQuery('#text3').fadeIn();",11000 );
    setTimeout( "jQuery('#text3').fadeOut();",15000 );
    setTimeout( "jQuery('#text4').fadeIn();",16000 );
    setTimeout( "jQuery('#text4').fadeOut();",20000 );
    setTimeout( "jQuery('#text5').fadeIn();",21000 );

});
  

CSS:

 .hidden {
display: none;
}
  

HTML:

 <div id="startagain" class=hidden">Start Again!</div>
<div id="text1" class="hidden">Text 1</div>
<div id="text2" class="hidden">Text 2</div>
<div id="text3" class="hidden">Text 3</div>
<div id="text4" class="hidden">Text 4</div>
<div id="text5" class="hidden">Text 5</div>
  

Любая помощь действительно ценится! 🙂

Ответ №1:

@Sarah Не удалось опубликовать код в ответном комментарии, так что давай:

 function runIt(){
$('#myText').hover(function(){
        $(this).clearQueue().html('Start Again');

    })
    .click(function(){
        runIt();
    })
    .html('text 1')
    .fadeIn(1000)
    .delay(5000)
    .fadeOut(1000,function(){
        $(this).html('text 2');
    })
    .fadeIn(1000)
    .delay(5000)
    .fadeOut(1000,function(){
        $(this).html('text 3').unbind('hover');
    })
    .fadeIn(1000);
};
  

Комментарии:

1. Спасибо, Дэвид, теперь это работает! Единственная проблема, с которой я сталкиваюсь, заключается в том, что при наведении курсора мыши все еще запускается «начать снова» в text3. Есть ли способ остановить это? Извините, блондинистый момент :/

2. @Sarah это здорово, Сара! Пожалуйста, не стесняйтесь принять ответ, поскольку именно так stack overflow работает лучше всего!

Ответ №2:

Ваша базовая настройка и очистка таймеров…

 //sets the timer for 1 second (same syntax as setInterval)
var timer = setTimeout(function() { ... }, 1000);

//clears the timer, the function will never get called.
clearInterval(timer);
  

Если вы ставите анимации в очередь, лучше всего использовать функции обратного вызова вместо таймеров, например:

 //#text1 will fadeOut immediately following it fading in.
$('#text1').fadeIn(function() {
  //occurs after the first animation is complete
  //this refers to #text1
  $(this).fadeOut();
});
  

Надеюсь, это поможет!

Ответ №3:

Вы могли бы достичь этого эффекта, воспользовавшись очередью анимации jquery следующим образом

HTML:

 <div id="myText"></div>
  

Javascript:

 $(document).ready(function() {

    runIt();

});

function runIt(){
$('#myText').hover(function(){
        $(this).clearQueue().html('Start Again');

    })
    .click(function(){
        runIt();
    })
    .html('text 1')
    .fadeIn(1000)
    .delay(5000)
    .fadeOut(1000,function(){
        $(this).html('text 2');
    })
    .fadeIn(1000)
    .delay(5000)
    .fadeOut(1000,function(){
        $(this).html('text 3');
    })
    .fadeIn(1000)
    .delay(5000)
    .fadeOut(1000,function(){
        $(this).html('start again');
    });
};
  

Комментарии:

1. Спасибо, Дэвид! Есть ли способ сделать так, чтобы текст 3 оставался на экране (без затухания) и на него не влияло движение мыши?

2. Уверен, что вы можете просто удалить последний шаг, а также событие наведения, когда доберетесь туда, вот так: code функция runIt(){ $(‘#myText’).hover(функция(){ $(this). clearQueue().html(‘Начать снова’); }) .click(функция (){ runIt(); }) .html (‘текст 1’) .fadeIn(1000) .delay(5000) .fadeOut(1000, функция(){ $(this).html(‘текст 2’); }) .fadeIn(1000) .delay(5000) .fadeOut(1000, функция(){ $(this).html(). ‘текст 3’).отвязать (‘наведите курсор’); }); };

3. @Sarah смотрите мой другой ответ, поскольку публикация кода в комментарии у меня не сработала.