javascript - Html5音频ios播放事件

标签 javascript html ios audio

我正在尝试检测音频何时开始在 ios 上播放。问题是,当我按下播放时,播放、播放事件会立即触发,但音频会在几秒钟后开始播放。我正在使用约 5mb 的音频文件。

为什么这些事件和音频开始之间存在这样的延迟,以及如何检测声音何时真正开始?

document.getElementById('audio').addEventListener("play", play, false);
document.getElementById('audio').addEventListener("playing", playing, false);

function play() {
  var h = document.createElement("H1");
  var t = document.createTextNode('play');
  h.appendChild(t);
  document.body.appendChild(h);
}

function playing() {
  var h = document.createElement("H1");
  var t = document.createTextNode('playing');
  h.appendChild(t);
  document.body.appendChild(h);
}
<audio id="audio" controls preload="auto">
      <source src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_5MG.mp3" type="audio/mpeg" />
    </audio>

这里是jsfiddle,你可以在ipad上查看。

https://jsfiddle.net/pmw8fa5e/1/

最佳答案

虽然我不太确定导致 iOs 设备延迟的原因,但我建议采用一种解决方法,无论使用什么浏览器,该解决方法都应该有效。

不要监听 playplaying 事件,而是监听 timeUpdate 事件。在回调函数中,只需检查音频元素的 .currentTime 属性是否大于零。

document.getElementById('audio').addEventListener("timeupdate", update, false);
document.getElementById('audio').addEventListener("play", play, false);
var started = false;
var playPushed = false;
var startTime;

function update() {
  if (playPushed && !started && document.getElementById('audio').currentTime > startTime) {
    started = true;
    var h = document.createElement("H1");
    var t = document.createTextNode('playing');
    h.appendChild(t);
    document.body.appendChild(h);
  }
}

function play() {
  playPushed = true;
  startTime = document.getElementById('audio').currentTime;
}
<audio id="audio" controls preload="auto">
      <source src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_5MG.mp3" type="audio/mpeg" />
    </audio>

关于javascript - Html5音频ios播放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60179251/

相关文章:

javascript - 为什么 ng-repeat 指令不起作用?

javascript - Drupal 上的 jCarousel

ios - 如何使待办事项列表中生成的文本显示为彩色

html - Bootstrap 导航栏在移动设备上透明

ios - 如何将所选 Collection View Cell 的图像推送到另一个 View Controller?

ios - UITableview 没有从 super View 中删除

javascript - JQuery - 不要在按钮成功/错误上添加悬停类

javascript - 检测当前 Web 组件外部的点击

javascript - 在JS中插入CSS链接标签时阻止页面渲染

javascript - 类 vs 数据- vs 自定义属性