av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

javascript - 關于audio標簽暫停的問題

瀏覽:108日期:2022-11-16 09:14:40

問題描述

<audio src='http://m.4tl426be.cn/wenda/res/bg.mp3' controls loop></audio> <input type='checkbox' />:是否播放背景音樂 <script>bgm.onchange=function(){ if(this.checked){m1.volume=0;m1.play();var timer=setInterval(function(){ m1.volume+=0.1; if(m1.volume>0.9){clearInterval(timer); }},200); }else{var timer=setInterval(function(){ if(m1.volume>0){m1.volume-=0.1; }else{clearInterval(timer);m1.pause(); }},200); }} </script>

代碼如上,想要做一個點擊checkbox實現背景音樂淡入淡出的小功能,淡入可以實現,但是淡出時,我想要音量變為0時,自動暫停。但是我這個音量變為0之后,進度條仍然在走,m1.pause()沒有生效。。

實在搞不明白,前端小白,求指導π-π

問題解答

回答1:

這個問題比較好玩,代碼的邏輯是沒問題的。

首先需要了解的是:js中浮點數的計算不精確的,比如:0.2 + 0.1結果是0.30000000000000004。

然后直接原因是報錯:Failed to set the ’volume’ property on ’HTMLMediaElement’: The volume provided (-1.77636e-16) is outside the range [0, 1].這是在說volume只能在[0, 1]的區間內賦值。

漸入時,每次加 0.1,實際volume的值打印出來是:

javascript - 關于audio標簽暫停的問題

volume每次減 0.1,實際減到最后會產生一個非常非常小的數,但仍大于 0:

javascript - 關于audio標簽暫停的問題

所以仍會執行m1.volume-=0.1導致volume被設置為負數報上面的錯。

解決方案已經有同學給出了。另外可以關注下 ES6 Number.EPSILON,專門用于解決計算精度問題。

回答2:

問題出在volume的值,在HTML5規范中,volume的值是不能小于0的,但你代碼中的計算使volume的值小于0了,故腳本出錯了不再執行。建議改成

if(m1.volume>0.1){ m1.volume-=0.1;}else{ clearInterval(timer); m1.pause();}

這是錯誤記錄:Failed to set the ’volume’ property on ’HTMLMediaElement’: The volume provided (1.1) is outside the range [0, 1]另外,代碼沒有通過連續點擊測試,聲音沒達到最大時再點checkbox,會出現bug.

回答3:

改成這樣:

var timer = null; bgm.onchange=function(){if(this.checked){ m1.volume=0; m1.play(); clearInterval(timer); timer=setInterval(function(){m1.volume+=0.1;if(m1.volume>0.9){ clearInterval(timer);} },200);}else{ clearInterval(timer); timer=setInterval(function(){console.log(m1.volume)if(m1.volume>0){ // m1.volume -= 0.1;這里會有精度問題,一直減0.1不是到從1到0 m1.volume = m1.volume-0.1<=0?0:m1.volume-0.1;}else{ m1.pause(); clearInterval(timer);} },200);} }`

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产成人在线免费观看 | 久久免费精品视频 | 成人午夜视频在线观看 | 超碰com| 欧美黑人一区二区三区 | 538精品视频| 最近中文字幕在线 | 999av| 久久久网站 | 久操福利 | 亚洲黄色在线视频 | 日韩欧美国产精品 | 婷婷六月天 | 亚洲精品一区二三区不卡 | 欧美视频免费在线观看 | 一区二区三区在线看 | 欧美亚洲日本 | 午夜在线| 涩涩视频免费观看 | 人人澡人人爽 | 麻豆视频一区二区 | 深夜视频在线观看 | 亚洲狠狠干 | 成人做受黄大片 | 国产视频导航 | 国产午夜免费视频 | 8090理论片午夜理伦片 | 日韩超碰 | 国产理论在线观看 | 男女激情视频网站 | 福利视频一区二区 | 久草视频观看 | 成人激情视频在线观看 | 手机av在线 | 亚洲精品欧美 | 一级黄色在线观看 | 精品一二三 | 中文字幕影院 | 久久精品欧美一区二区 | 欧美一级黄色大片 | 国产精品免费在线播放 |