我目前正在嘗試獲得重復的聲音效果,隨著時間的推移,setTimeout() 與影片同步會變慢。一旦我讓它同步,它就會作業并在我處理程式的時候保持同步。但是現在,當我離開大約 1 1/2 小時并完全按照我離開時再次運行程式時,聲音不再與影片同步。昨天當我離開一段時間和過夜時,同樣的事情發生在我身上。
所以我在想 setTimeout() 以某種方式與當前時間一起作業,并且在不同的時間會以不同的方式作業。有人可以證實這一點嗎?
這是我的代碼供參考。超時函式:
const timeoutRollSound = (time = 0, index = 0) => {
setTimeout(() => {
const audioClick = new Audio(
"foo/bar.wav"
);
audioClick.play();
index ;
timeoutRollSound(0.05 * Math.pow(index, 2) 3 * index - 50, index)
}, time);
};
影片:
$(".itemToAnimate").animate(
{ right: endpoint },
{
duration: 10000,
easing: "easeOutQuint",
}
);
uj5u.com熱心網友回復:
幾年前我在 Java 中遇到過這個問題。這是怎么回事。
當您設定超時(就像您正在做的那樣)時,您實際上是在說“我不希望此函式在 X 毫秒之前執行”。因此,超時函式可能已準備好運行,但 JavaScript 或瀏覽器可能正在做其他事情。
setInterval 可能效果更好。但是您可以做的另一件事是包括代碼有資格運行的時間和實際運行的時間之間的差異,例如:
setTimeout(() => {
const audioClick = new Audio(
"foo/bar.wav"
);
audioClick.play();
index ;
timeoutRollSound(0.05 * Math.pow(index, 2) 3 * index - 50, index)
timeoutRollSound.last = Date.now();
}, time - ((Date.now - timeoutRollSound.last) );
uj5u.com熱心網友回復:
這讓我想起了我在另一個 JS 庫中遇到的一個問題,可能與此相關。如果將瀏覽器中的選項卡置于后臺,則執行將暫停。從我從您的代碼中獲得的資訊來看,您依賴于遞回setTimeout將不斷運行的事實,這可能是您問題的根源。
這可能是您遇到的問題,請查看:Chrome:后臺選項卡中暫停的超時/間隔?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/377287.html
標籤:javascript 查询 设置超时
