Я прочитал этот ответ, но не могу перенести его с помощью этого кода.
<button class="btn btn-success pause" id="btnFunction" onclick="toggleFunction();" type="button">Play</button>
<img id="mainImage" src="images/noSignal.jpg">
<script>
function play() {
if ($("#btnFunction").hasClass("play")) {
var newImage = new Image(),
count = 0;
newImage.onload = function() {
updateImage();
};
newImage.onerror = function() {
document.getElementById("mainImage").src = "images/noSignal.jpg";
iziToast.warning({
position: "topRight",
title: "error in getting image",
timeout: 1000
});
setTimeout(play, 2500);
};
newImage.src = "images/noSignal.jpg";
function updateImage() {
if (newImage.complete) {
document.getElementById("mainImage").src = newImage.src;
newImage.src = "playSocket.php?message=11001&image" + count++ + ".jpg";
} else {
iziToast.error({
position: "topRight",
title: "error in getting image",
timeout: 1000
});
setTimeout(updateImage, 2500);
}
}
}
}
function toggleFunction() {
if ($("#btnFunction").hasClass("pause")) {
$("#btnFunction").html("Disable Playing");
$("#btnFunction").removeClass("btn-success pause");
$("#btnFunction").addClass("btn-danger play");
play();
} else if ($("#btnFunction").hasClass("play")) {
$("#btnFunction").html("Enable Playing");
$("#btnFunction").removeClass("btn-danger play");
$("#btnFunction").addClass("btn-success pause");
}
}
</script>
Если я дважды нажму кнопку, она запустит функцию два раза, и если код не может получить изображение из playSocket.php, он покажет два раза iziToast.warning и повторит показ через 2,5 секунды и после этого, пока не получит изображение и не загрузит его изображение.
Как предотвратить многократное выполнение функции?
Есть лучший способ узнать, что изображение успешно загружено, и получить следующее изображение или ошибку при получении изображения и повторить попытку? альтернатива для newImage.onload
и newImage.onerror