Javascript IndexSizeError使用JS在视频元素的声音中淡入时引起的

Javascript IndexSizeError使用JS在视频元素的声音中淡入时引起的,javascript,html5-audio,Javascript,Html5 Audio,我得到以下错误 music.js:31 Uncaught IndexSizeError:未能在“HtmlMedia元素”上设置“volume”属性:提供的卷(1)超出范围[0,1] 下面显示了我的代码。我在示例中包含了一个远程mp3文件,以便在运行代码段时使用 我想弄清楚的是,我设置了一个条件,当音量达到1时,清除间隔并停止 提供的卷(1)超出范围[0,1],这对我来说是一个错误,因为卷是1 有什么建议吗 window.onload=函数playSound(){ 无功电流声; //我有一个叫“

我得到以下错误

music.js:31 Uncaught IndexSizeError:未能在“HtmlMedia元素”上设置“volume”属性:提供的卷(1)超出范围[0,1]

下面显示了我的代码。我在示例中包含了一个远程mp3文件,以便在运行代码段时使用

我想弄清楚的是,我设置了一个条件,当音量达到1时,清除间隔并停止

提供的卷(1)超出范围[0,1],这对我来说是一个错误,因为卷是1

有什么建议吗

window.onload=函数playSound(){
无功电流声;
//我有一个叫“佩奇”的部门
var soundcv=window.document.body;
//在播放中设置淡出开始的点。这是2秒钟的淡出。
//为了简单起见,这只适用于一种声音
功能播放声音(声音){
如果(currentSound==null){
var audio=window.document.createElement('video');
setAttribute('id','audio1');
audio.src=声音;
audio.id='video';
soundcv.appendChild(音频);
当前声音=音频;
}
currentSound.volume=0;
currentSound.play();
}
//这不是一个真正的音频文件URL-请用您自己的URL替换它
播放声音('http://dl.last.fm/static/1458674990/114531092/eaba95c9c6e959558078b8f4eaab169211205de80b3e194238a5469e9a0c5c84/Somewhere+关+爵士乐+街头+-+附带+伤害.mp3');
函数fadeIn(){
如果(currentSound.volume==1){
清除间隔(计时器);
返回;
}
currentSound.volume+=0.005;
}
var定时器=设置间隔(fadeIn,200);
};TL;博士:

您应该通过如下设置音量来修复它:

currentSound.volume=Math.min(currentSound.volume+0.005,1);


因为JS(和其他语言)使用IEEE754来存储浮点数,而浮点数的存储是受限制的。 例:
0.1+0.2===0.300000000004

在间隔通话中,您使用
0.005
增加当前音量。当接近1时,您将获得
0.9950000000000008
。 下一次迭代是:
0.9950000000000008+0.005==1.0000000000000007

Try:
for(vari=0,a=0;i<200;i++){console.log(a+=0.005)}


这里的问题是控制台的消息,其中1没有给出指数部分(
.0000000000007

==对于看到相同错误的任何人,请阅读此==

你必须得到那个错误,HTML5播放器的音量只能设置在0到1[0,1]之间

要实现从0到1的运行,假设您有如下范围输入:

<input id="Volume" type="range" onmouseup="SetVolume(this.value)" min="0" max="10" step="1">

   function SetVolume(val){
    var newVolume=val / 10;
    // when is 1 it will give 0.1 and so on up to 0.9 
    //next push will be 1 and it stops.
    currentSound.volume=newVolume;
    });

函数设置音量(val){
var newVolume=val/10;
//当值为1时,它将给出0.1,依此类推直到0.9
//下一次推动将为1,并停止。
currentSound.volume=新音量;
});