#jquery #loops #settimeout
#jquery #циклы #settimeout
Вопрос:
Мне просто нужно создать бесконечный цикл через 3 варианта элемента. Это то, что у меня есть до сих пор:
var count = 1;
setTimeout(transition, 2000);
function transition() {
if(count == 1) {
$('#ele').html('variation 2');
var count = 2;
} else if(count == 2) {
$('#ele').html('variation 3');
var count = 3;
} else if(count == 3) {
$('#ele').html('variation 1');
var count = 1;
}
setTimeout(transition, 2000);
}
Ответ №1:
попробуйте это :
var count = 1;
function transition() {
if(count == 1) {
$('#ele').html('variation 2');
count = 2;
} else if(count == 2) {
$('#ele').html('variation 3');
count = 3;
} else if(count == 3) {
$('#ele').html('variation 1');
count = 1;
}
}
setInterval(transition, 2000);
Ответ №2:
Если вы хотите бесконечный цикл, вы должны использовать setInterval()
. Это приведет к запуску бесконечного цикла, при каждом запуске следующего варианта:
var i=0;
setInterval(function() {
switch(i %3) {
case 0: alert("variation 1");
break;
case 1: alert("variation 2");
break;
case 2: alert("variation 3");
break;
}
}, 2000);
Если позже вы решите, что вам нужно остановить повторяющийся код, сохраните возвращаемое значение при установке интервала и очистите его:
var intervalId = setInterval(function() {
...
}, 1000);
clearInterval(intervalId);
Ответ №3:
Это лучшее решение:
Метод clearTimeout() очищает таймер, установленный с помощью метода setTimeout().
(function(){
var timer, count=1;
function transition(){
clearTimeout(timer);
switch(count){
case 1: count = 2; break;
case 2: count = 3; break;
case 3: count = 1; break;
}
$('#ele').html('variation ' count);
timer = setTimeout(transition, 2000);
}
transition();
})();
Ответ №4:
У вас есть var
перед вашей count
переменной внутри transition
функции. Удалите их, и внешняя count
переменная сохранит свое значение.
Ответ №5:
Мой лучший способ в реальных заданиях — «Забыть базовые циклы» в этом случае и использовать эту комбинацию «setInterval» включает «setTimeout»s:
function iAsk(lvl){
var i=0;
var intr =setInterval(function(){ // start the loop
i ; // increment it
if(i>lvl){ // check if the end round reached.
clearInterval(intr);
return;
}
setTimeout(function(){
$(".imag").prop("src",pPng); // do first bla bla bla after 50 millisecond
},50);
setTimeout(function(){
// do another bla bla bla after 100 millisecond.
seq[i-1]=(Math.ceil(Math.random()*4)).toString();
$("#hh").after('<br>' i ' : rand= ' (Math.ceil(Math.random()*4)).toString() ' > ' seq[i-1]);
$("#d" seq[i-1]).prop("src",pGif);
var d =document.getElementById('aud');
d.play();
},100);
setTimeout(function(){
// keep adding bla bla bla till you done :)
$("#d" seq[i-1]).prop("src",pPng);
},900);
},1000); // loop waiting time must be >= 900 (biggest timeOut for inside actions)
}
PS: Поймите, что реальное поведение (setTimeout): все они начнутся в одно и то же время «три бла-бла-бла начнут обратный отсчет в один и тот же момент», поэтому установите другой тайм-аут для организации выполнения.
PS 2: пример для цикла синхронизации, но для циклов реагирования вы можете использовать события, обещающие асинхронное ожидание ..
Ответ №6:
если вы все еще хотите использовать setTimeout и clearTimeout для создания цикла, вам следует использовать что-то вроде этой структуры для вашего цикла
var count = 1;
var timer = setTimeout( function(){
transaction();
} , 2000);
function transition() {
if(count == 1) {
$('#ele').html('variation 2');
count = 2;
} else if(count == 2) {
$('#ele').html('variation 3');
count = 3;
} else if(count == 3) {
$('#ele').html('variation 1');
count = 1;
}
//if(condition for continue)
setTimeout(transition, 2000);
//else if you want to stop the loop
//clearTimeout(timer, 2000);
}
Ответ №7:
$(document).ready(function () {
$("[data-count]").each(function () {
counter($(this), .5)
});
function counter(el, speed) {
let number = el.data("count"),
count_type = el.data("count-type"),
i = count_type === "up" ? 0 : number;
let inter_val = setInterval(function () {
el.text(i);
i = count_type === "up" ? i 1 : i - 1;
if ((count_type === "up" amp;amp; i > number) || (count_type === "down" amp;amp; i < 0))
clearInterval(inter_val);
}, speed);
}
});
span {
background-color: #eeeeee;
color: #333;
padding: 15px 25px;
margin: 10px;
display: inline-block;
width: 100px;
text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>COUNT UP EXAMPLE</p>
<span data-count="1650" data-count-type="up"></span>
<span data-count="2500" data-count-type="up"></span>
<span data-count="985" data-count-type="up"></span>
<br>
<p>COUNT DOWN EXAMPLE</p>
<span data-count="1650" data-count-type="down"></span>
<span data-count="2500" data-count-type="down"></span>
<span data-count="985" data-count-type="down"></span>