JavaScript - audio
Zdravím, mám prosbu. Potřebuji v js spustit audio na základě boolean, při změně value na true a nastaveném setIntervalu 10s pro kontrolu dané value. Myslel jsem, že to bude jednodušší. Na spoustu událostí je v js trigger, ale na toto jsem nenašel . Respektive není problém spustit audio, ale potřebuji aby se mi pustilo jen jednou. Při nastaveném intervalu pro kontrolu hodnoty se mi spouští každých deset sekund. Jsem začátečník, ale třeba stačí nakopnout. Díky .
Bez kódu se těžko radí. Ale třeba přepnout tu boolean proměnnou zpátky na false?
Na nekonkrétní dotaz nekonkrétní (ale věcná) odpověď.
Google: javascript sound play once
Např. https://stackoverflow.com/questions/32077459/play-sound-only-once
function myFunction() {
var x = document.createElement("AUDIO");
if (x.canPlayType("audio/mpeg")) {
x.setAttribute("src","xxx.mp3");
} else {
x.setAttribute("src","xxx.ogg");
}
x.setAttribute("autoplay", "autoplay");
x.style.display = "none";
document.body.appendChild(x);
}
function myAlarm() {
var y = GetTagValueAsBoolean('CDK.ExtOM2');
if (y) {
myFunction();
};
}
var e = setInterval(myAlarm, 10000);
Jestli to s programováním myslíš trošku vážně, tak by se měl zamyslet na pojmenováním proměných, funkcí atd. Už jenom jméno by ti mělo napovědět, o co se jedná. "myFunction", "x", "y" nebo "e" ti opravdu nic neřekne.
Děkuji za pomoc i rady. Audio se nyní již nespouští opakovaně každých 10s, ale bohužel se mi nespustí znovu ani když dojde k opětovné změně hodnoty. Tzn. pokud načtu stránku a dojde ke změně hodnoty na true - audio se přehraje jak má(bez opakování). Jakmile se však následně (třeba po 1min) změní hodnoty na false a následně opět na true - audio se již nespustí.
A nebylo by teda lepší to přehrátí navázat přímo na změnu té hodnoty, než v cyklu kontrolovat, jestli se náhodou nezměnila?
Díky za rady. Přikládám řešení, třeba se někomu může někdy hodit.
let previousBooleanValue = GetTagValueAsBoolean('ExtWarn');
let audioStarted = false;
function playAudio() {
const audio = new Audio('xxx.mp3');
audio.play();
audioStarted = true;
}
setInterval(() => {
const myBooleanValue = GetTagValueAsBoolean('ExtWarn');
if (myBooleanValue && !previousBooleanValue && !audioStarted) {
playAudio();
}
if (!myBooleanValue) {
audioStarted = false;
}
previousBooleanValue = myBooleanValue;
}, 10000);