要素の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);
}
それを試してください:
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);
無限ループが必要な場合は、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);
これが最良の解決策です:
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();
})();
実際の仕事での私の最善の方法は、「基本ループを忘れる」ことですこの場合、「setInterval」のこの組み合わせを使用して、「setTimeOut」を含めます。
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:タイミングループの例ですが、リアクションループの場合はイベントを使用できます。asyncawaitを約束します。
$(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" && i > number) || (count_type === "down" && 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>
var
関数内のcount
変数の前にtransition
があります。それらを削除すると、外側のcount
変数がその値を保持します。
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);
}