首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在手机上反复播放HTML声音会有奇怪的行为

在手机上反复播放HTML声音会有奇怪的行为
EN

Stack Overflow用户
提问于 2022-05-07 22:32:15
回答 1查看 38关注 0票数 0

我有一个让声音通过计时器反复播放的js程序,并且在我的电脑上工作得非常好,但是,当我尝试在我的手机(IPhone 13)或平板电脑(IPad air 4)上使用它时,它不起作用。声音不是晚了就是不放了。如果它提供了任何线索,我还注意到,如果我在程序运行时改变了手机的系统音量(手机一侧有物理按钮),音量条就会滞后和跳跃,而不是平稳地增加或减少。

安装以允许声音在ios上播放(因为它们需要用户交互)

代码语言:javascript
运行
复制
var click1 = new Audio('../audio/click1.mp3');
click1.preload = "auto";

enterBtn.addEventListener('click', () => {
    //...code

    click1.volume = 0;
    click1.play();
    click1.pause();
    click1.currentTime = 0;
    click1.volume = 1;
});

当定时器调用它时运行的代码。

代码语言:javascript
运行
复制
function playClick() {
    click1.load();
    click1.play();
    click1.currentTime = 0;
    //...code
}

从堆栈溢出中获取的计时器代码

代码语言:javascript
运行
复制
function Timer(callback, timeInterval, options) {
   this.timeInterval = timeInterval;
   
   this.start = () => {
     this.expected = Date.now() + this.timeInterval;
     this.theTimeout = null;

     if (options.immediate) {
       callback();
     }

     this.timeout = setTimeout(this.round, this.timeInterval);
     console.log('Timer Started');
   }
  this.stop = () => {
  clearTimeout(this.timeout);
  }
  this.round = () => {
    var drift = Date.now() - this.expected;
    if (drift > this.timeInterval) {
      if (options.errorCallback) {
        options.errorCallback();
      }
    }
    callback();
    this.expected += this.timeInterval;
    this.timeout = setTimeout(this.round, Math.max(0,this.timeInterval - drift));
  }
}

export default Timer;
EN

回答 1

Stack Overflow用户

发布于 2022-05-07 22:40:20

setInterval代替计时器怎么样?https://developer.mozilla.org/en-US/docs/Web/API/setInterval

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72156793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档