Αυτή η παρακάτω συνάρτηση δεν λειτουργεί όπως την θέλω- όντας αρχάριος στο JS δεν μπορώ να καταλάβω γιατί.
Θέλω να περιμένει 5 δευτερόλεπτα πριν ελέγξει αν η newState
είναι -1
.
Επί του παρόντος, δεν περιμένει, απλά ελέγχει αμέσως.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
Πρέπει να τοποθετήσετε τον κώδικά σας στη συνάρτηση επανάκλησης που παρέχετε στην setTimeout
:
function stateChange(newState) {
setTimeout(function () {
if (newState == -1) {
alert('VIDEO HAS STOPPED');
}
}, 5000);
}
Οποιοσδήποτε άλλος κώδικας θα εκτελεστεί αμέσως.
Δεν πρέπει να προσπαθείτε να κάνετε παύση 5 δευτερολέπτων σε javascript. Δεν λειτουργεί με αυτόν τον τρόπο. Μπορείτε να προγραμματίσετε μια συνάρτηση κώδικα να εκτελεστεί σε 5 δευτερόλεπτα από τώρα, αλλά πρέπει να βάλετε τον κώδικα που θέλετε να εκτελεστεί αργότερα σε μια συνάρτηση και ο υπόλοιπος κώδικάς σας μετά από αυτή τη συνάρτηση θα συνεχίσει να εκτελείται αμέσως.
Για παράδειγμα:
function stateChange(newState) {
setTimeout(function(){
if(newState == -1){alert('VIDEO HAS STOPPED');}
}, 5000);
}
Αλλά, αν έχετε κώδικα όπως αυτός:
stateChange(-1);
console.log("Hello");
Η εντολή console.log()
θα εκτελεστεί αμέσως. Δεν θα περιμένει μέχρι να ενεργοποιηθεί το χρονικό όριο στη συνάρτηση stateChange()
. Δεν μπορείτε απλά να διακόψετε την εκτέλεση javascript για ένα προκαθορισμένο χρονικό διάστημα.
Αντίθετα, οποιοσδήποτε κώδικας που θέλετε να εκτελείται με καθυστέρηση πρέπει να βρίσκεται μέσα στη συνάρτηση επανάκλησης setTimeout()
(ή να καλείται από αυτή τη συνάρτηση).
Αν προσπαθούσατε να κάνετε "παύση" με βρόχο, τότε ουσιαστικά θα "κρεμούσατε" τον διερμηνέα Javascript για ένα χρονικό διάστημα. Επειδή η Javascript εκτελεί τον κώδικά σας σε ένα μόνο νήμα, όταν κάνετε βρόχο δεν μπορεί να εκτελεστεί τίποτα άλλο (δεν μπορούν να κληθούν άλλοι χειριστές συμβάντων). Έτσι, η επανάληψη περιμένοντας την αλλαγή κάποιας μεταβλητής δεν θα λειτουργήσει ποτέ, επειδή κανένας άλλος κώδικας δεν μπορεί να εκτελεστεί για να αλλάξει αυτή τη μεταβλητή.
Χρησιμοποιήστε μια συνάρτηση καθυστέρησης όπως αυτή:
var delay = ( function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
Χρήση:
delay(function(){
// do stuff
}, 5000 ); // end delay
Οι πιστώσεις πηγαίνουν στο χρήστη CMS, βλέπε https://stackoverflow.com/q/1909441/1066234