コードは上記の通りです。BGMのフェードイン、フェードアウトを?qū)g現(xiàn)するために、チェックボックスをクリックする小さな機能を作りたいです。フェードインは実現(xiàn)できますが、フェードアウトの場合は欲しいです。音量が 0 になると自動的に一時停止します。しかし、ボリュームを 0 に変更した後も、進行狀況バーは実行されたままで、m1.pause() は有効になりませんでした。 。
本當にわかりません。フロントエンドは初めてです。教えてください π-π
業(yè)精于勤,荒于嬉;行成于思,毀于隨。
この質(zhì)問は非常に興味深いもので、コードのロジックは正しいです。
最初に理解する必要があるのは、次のような js での浮動小數(shù)點數(shù)の計算は正確ではないということです。 0.2 + 0.1
結(jié)果是0.30000000000000004
これは、ボリュームには [0, 1] の範囲內(nèi)の値のみを割り當てることができることを意味します。 Failed to set the 'volume' property on 'HTMLMediaElement': The volume provided (-1.77636e-16) is outside the range [0, 1].
そのため、引き続き実行されます
m1.volume-=0.1
解決策はすでにクラスメイトによって與えられています。計算精度の問題を解決するために特別に使用される ES6 Number.EPSILON にも注目してください。
問題はボリュームの値にあります。HTML5 仕様では、ボリュームの値は 0 未満にすることはできませんが、コード內(nèi)の計算ではボリュームの値が 0 未満になるため、スクリプトは実行されません。エラー。
に変更することをお勧めします リーリーこれはエラー レコードです:
'HTMLMediaElement' の 'volume' プロパティの設(shè)定に失敗しました: 指定されたボリューム (1.1) は [0, 1] の範囲外です
さらに、コードは連続クリック テストとサウンドに失敗しました最大値に達していませんでした。再度チェックボックスをクリックするとバグが表示されます。