Ich verwende setTimeout, um eine Diashow zu starten. Ich möchte einen Knopf haben, um es zu stoppen. Das Markup ist:Scoping-Problem mit der Verwendung von clearTimeout
<h3> Modest Mouse at Fillmore in Miami <h3>
<div>
<img id="photo" src="http://the305.com/blog/wp-content/uploads/2014/05/modestmouse3.jpg" alt= "Modest Mouse at Fillmore">
<span>•</span>
<span>•</span>
<span>•</span>
</div>
<button onclick="stopShow();">Stop</button>
Die JS ist:
var aSlideShowPics = ["http://the305.com/blog/wp-content/uploads/2014/05/modestmouse3.jpg",
"http://the305.com/blog/wp-content/uploads/2014/05/modestmoude7.jpg",
"http://the305.com/blog/wp-content/uploads/2014/05/modestmouse8.jpg"
];
// Timer for SlideShow
var i = 0;
function changeSlide() {
var stopShowID;
stopShowID = window.setTimeout(function() {
newPic = aSlideShowPics[i];
$("#photo").attr("src", newPic);
i++;
if (i < aSlideShowPics.length) {
changeSlide(); // recursive call to increment i and change picture in DOM.
} else {
i = 0; // reset loop to keep slideshow going
changeSlide(); // Recursive call on loop end
}
function stopShow() {
window.clearTimeout(stopShowID);
}
}, 3000)
}
changeSlide();
Ich halte einen Referenzfehler auf die Schaltfläche klicken, ohne stopShow bekommen. Ich habe versucht, die clearTimeout-Funktion an mehreren Stellen im Code, aber den gleichen Fehler zu bekommen. Vielleicht kann eine neue Reihe von Augen meinen Fehler sehen. Hier ist die jsfiddle. Danke für jede Eingabe.
Warum ist stopShow innerhalb der Timeout-Verschluss ziehen? Das ist dein Problem – epascarello
Ich dachte, dass das Problem war, aber wenn ich es außerhalb von changeslide in den globalen Bereich und den gleichen Fehler verschoben habe ... – alan