#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 смотрите мой другой ответ, поскольку публикация кода в комментарии у меня не сработала.