Denne funktion nedenfor virker ikke som jeg ønsker det; da jeg er JS-novice kan jeg ikke finde ud af hvorfor.
Jeg skal have den til at vente 5 sekunder før den kontrollerer om newState
er -1
.
I øjeblikket venter den ikke, den kontrollerer bare med det samme.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
Du skal indsætte din kode i den callback-funktion, som du leverer til setTimeout
:
function stateChange(newState) {
setTimeout(function () {
if (newState == -1) {
alert('VIDEO HAS STOPPED');
}
}, 5000);
}
Al anden kode vil blive udført med det samme.
Du bør ikke bare forsøge at sætte 5 sekunder på pause i javascript. Det virker ikke på den måde. Du kan planlægge en kodefunktion til at køre om 5 sekunder, men du skal sætte den kode, du vil køre senere, ind i en funktion, og resten af din kode efter denne funktion vil fortsætte med at køre med det samme.
F.eks:
function stateChange(newState) {
setTimeout(function(){
if(newState == -1){alert('VIDEO HAS STOPPED');}
}, 5000);
}
Men hvis du har kode som denne:
stateChange(-1);
console.log("Hello");
vil console.log()
-meddelelsen blive kørt med det samme. Den vil ikke vente, til timeout-funktionen stateChange()
udløses efter timeout-funktionen. Du kan ikke bare sætte javascript-eksekvering på pause i et forudbestemt tidsrum.
I stedet skal al kode, som du vil have forsinkelser, være inden for callback-funktionen setTimeout()
(eller kaldes fra denne funktion).
Hvis du forsøgte at "pause" ved at lave en sløjfe, ville du i det væsentlige "hænge" Javascript-fortolkeren i et stykke tid. Da Javascript kun kører din kode i en enkelt tråd, kan intet andet køre, når du laver en løkke (ingen andre event handlers kan blive kaldt). Så looping, hvor du venter på, at en variabel ændres, vil aldrig fungere, fordi ingen anden kode kan køre for at ændre den pågældende variabel.
Brug en forsinkelsesfunktion som denne:
var delay = ( function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
Anvendelse:
delay(function(){
// do stuff
}, 5000 ); // end delay
Credits går til brugeren CMS, se https://stackoverflow.com/q/1909441/1066234