Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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 :-).

Předmět Autor Datum
Bez kódu se těžko radí. Ale třeba přepnout tu boolean proměnnou zpátky na false?
Wikan 14.04.2023 07:12
Wikan
Na nekonkrétní dotaz nekonkrétní (ale věcná) odpověď. Google: javascript sound play once Např. htt…
host 14.04.2023 08:13
host
function myFunction() { var x = document.createElement("AUDIO"); if (x.canPlayType("audio/mpeg")) {…
ladra 17.04.2023 11:15
ladra
function myFunction() { var x = document.createElement("AUDIO"); if (x.canPlayType("audio/mpeg")) {…
Wikan 17.04.2023 11:33
Wikan
Děkuji za pomoc i rady. Audio se nyní již nespouští opakovaně každých 10s, ale bohužel se mi nespust…
ladra 18.04.2023 15:51
ladra
A nebylo by teda lepší to přehrátí navázat přímo na změnu té hodnoty, než v cyklu kontrolovat, jestl…
Wikan 18.04.2023 15:56
Wikan
Díky za rady. Přikládám řešení, třeba se někomu může někdy hodit. let previousBooleanValue = GetTag… poslední
ladra 26.04.2023 17:42
ladra

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);

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();
    clearInterval(e);
  }
}
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í.

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);

Zpět do poradny Odpovědět na původní otázku Nahoru