I have a simple code here showing some random images every time it is refreshed & 2 buttons mainly Display Random Image & Stop. How can I set a timer of 2 seconds every time a user clicks on the Display Random Image & stop the recurrence when stop is click?
var imageUrls = [ "https://cdn.pixabay.com/photo/2020/11/18/19/41/cathedral-5756535_640.jpg", "https://cdn.pixabay.com/photo/2018/05/28/18/35/sahara-3436700_960_720.jpg", "https://cdn.pixabay.com/photo/2020/10/14/22/32/buildings-5655593_640.jpg", "https://cdn.pixabay.com/photo/2020/07/20/12/08/social-distancing-5422795_640.jpg", "https://cdn.pixabay.com/photo/2020/11/22/16/58/road-5767221_640.jpg", "https://cdn.pixabay.com/photo/2016/09/10/02/20/photography-1658471_640.jpg" ]; function getImageHtmlCode() { var dataIndex = Math.floor(Math.random() * imageUrls.length); var img = '<a href="' + '"><img src="'; img += imageUrls[dataIndex]; img += '" alt="Image Error"/></a>'; return img; } var start = false; var numChange; function startButton() { if (document.getElementById("go")) { numChange = setInterval(getImageHtmlCode, 1000); } } function stopButton() { if (start == true) { start = false; } } document.write(getImageHtmlCode());
<input type="button" id="go" onclick="startButton()" value="Display Random Image"> <button onclick="stopButton()">Stop</button><br/>
Advertisement
Answer
Have a look at this
It is not recommended to use document.write
You do not need a start boolean when you can set and clear the interval
I just change the source of the image to avoid manipulating the DOM after initialising the image
var imageUrls = [ "https://cdn.pixabay.com/photo/2020/11/18/19/41/cathedral-5756535_640.jpg", "https://cdn.pixabay.com/photo/2018/05/28/18/35/sahara-3436700_960_720.jpg", "https://cdn.pixabay.com/photo/2020/10/14/22/32/buildings-5655593_640.jpg", "https://cdn.pixabay.com/photo/2020/07/20/12/08/social-distancing-5422795_640.jpg", "https://cdn.pixabay.com/photo/2020/11/22/16/58/road-5767221_640.jpg", "https://cdn.pixabay.com/photo/2016/09/10/02/20/photography-1658471_640.jpg" ]; function getImage() { var dataIndex = Math.floor(Math.random() * imageUrls.length); return imageUrls[dataIndex]; } var numChange; function startButton() { clearInterval(numChange); // just make sure it is cleared before setting it again numChange = setInterval(show, 1000); } function stopButton() { clearInterval(numChange) } function show() { document.getElementById("image").src = getImage() } window.addEventListener("load", function() { // when page loads document.getElementById("imageDiv").innerHTML = '<a href=""><img id="image" src="' + getImage() + '" alt="Image Error"/></a>' document.getElementById("go").addEventListener("click", startButton); document.getElementById("stop").addEventListener("click", stopButton); })
<button type="button" id="go">Display Random Image</button> <button type="button" id="stop">Stop</button><br/> <div id="imageDiv"></div>