Javascript IOS上的HTML5音频:currentTime如何能小于初始值?

Javascript IOS上的HTML5音频:currentTime如何能小于初始值?,javascript,ios,ipad,html5-audio,Javascript,Ios,Ipad,Html5 Audio,我必须播放一段较短的较大音频片段。我使用currentTime设置时间起点,并使用timeupdate事件在需要时停止音频 我注意到,在一些早期的timeupdate事件中,有时currentTime小于其初始值,尽管(显然)没有“倒带”操作 下面是代码示例: var start = 1; var end = 1.3; var audio = document.getElementById('audio'); audio.addEventListener('timeupdate', functi

我必须播放一段较短的较大音频片段。我使用
currentTime
设置时间起点,并使用
timeupdate
事件在需要时停止音频

我注意到,在一些早期的
timeupdate
事件中,有时
currentTime
小于其初始值,尽管(显然)没有“倒带”操作

下面是代码示例:

var start = 1;
var end = 1.3;
var audio = document.getElementById('audio');
audio.addEventListener('timeupdate', function () {
   console.log(audio.currentTime);
   if (audio.currentTime < start || audio.currentTime > end) {
      audio.pause();
   }
});
audio.currentTime = start;
audio.play();
给你


在配备iOS 11.4.1的iPad上测试。此问题仅在非常短的时间范围内(约0.3秒)出现。

首先,您有一个错误的问题,因为您希望脚本在iOS上运行。正因为如此,你在标题中的问题是无关紧要的。我们在iOS上有很多bug,iOS开发者不想纠正它们。这是一只虫子。写信给iOS的支持人员,询问“这怎么可能?”

第二,你们的帖子里有两个问题,因为你们的脚本在iOS上并没有你们想要的效果

我为你写了解决方案。确保在音频元素加载元数据之前没有尝试调用音频(第一个错误)。那么你就犯了第二个错误:而不是:

if(audio.currentTime < start || audio.currentTime > end) //your mistake
解决方案(也适用于iOS)

var start=1,
结束=1.3,
audio=document.getElementById('audio'),
button=document.getElementById('button'),
log=document.getElementById('log');
addEventListener('timeupdate',function()
{
writeLog(音频.currentTime);
//您的错误:if(audio.currentTimeend)
如果(audio.currentTime>=结束)
{
audio.pause();
}
});
函数writeLog(值)
{
var div=document.createElement('div');
div.innerHTML=值;
log.insertBefore(div,log.firstChild);
}
addEventListener('loadedmetadata',function()
{
audio.pause();
按钮。删除属性(“禁用”);
});
addEventListener('click',function()
{
log.insertBefore(log.lastChild.cloneNode(!0),log.firstChild);
audio.currentTime=启动;
音频播放();
});
#日志
{
宽度:100%;
高度:18em;
溢出y:自动;
字体:3em‘信使新’;
背景:#069 ;;
颜色:#7e0
}
#日志分区:最后一个子项{显示:无}


.

如果您对我的答案感到满意,请在我答案的左侧标记为已接受。
if(audio.currentTime < start || audio.currentTime > end) //your mistake
if(audio.currentTime >= end)