Javascript HTML音频-提供的音量(-0.1)超出范围-Math max不工作

Javascript HTML音频-提供的音量(-0.1)超出范围-Math max不工作,javascript,Javascript,我创建了一个音量下降按钮,试图防止音量低于0.0。由于某些原因,Math.max无法正常工作。通过检查当前值/时间,不确定我做错了什么 如何添加一个逻辑,如果卷等于0.0,则返回而不执行任何操作 请参阅->向下箭头键代码40 (() => { const audio = document.querySelector('audio'); const playButton = document.getElementById('play'); const progress

我创建了一个音量下降按钮,试图防止音量低于0.0。由于某些原因,Math.max无法正常工作。通过检查当前值/时间,不确定我做错了什么

如何添加一个逻辑,如果卷等于0.0,则返回而不执行任何操作

请参阅->向下箭头键代码40

(() => {
    const audio = document.querySelector('audio');
    const playButton = document.getElementById('play');
    const progress = document.querySelector('.player__progress');
    const progressBar = document.querySelector('.player__progress__inner');
    const next = document.getElementById('next');
    const prev = document.getElementById('previous');
    const title = document.querySelector('.title');
    const status = document.querySelector('.status');
    const poster = document.querySelector('.player__image');

    if (!audio) {
        return;
    }

    // On play button click.
    const onPlayStart = () => {
        audio.paused ? audio.play() : audio.pause();
    };

    // On audio playing.
    const onPlaying = () => {
        playButton.innerHTML = `<i class="fas fa-pause"></i>`;

        // Change title if is currently playing.
        // status.innerText = `status: Wordt afgespeeld.`;
    };

    // On audio paused.
    const onPaused = () => {
        playButton.innerHTML = `<i class="fas fa-play"></i>`;

        // Change title if is currently paused.
        // status.innerText = `status: Is gepauzeerd.`;
    };

    // Update progress bar
    const onTimeUpdate = () => {
        const percent = (audio.currentTime / audio.duration) * 100;
        progressBar.style.width = `${percent}%`;
    };

    // Update progress on click
    const onProgressUpdate = (e) => {
        audio.currentTime = (e.offsetX / progress.clientWidth) * audio.duration;
    };

    const onKeyPress = (e) => {
        e.preventDefault();

        // Spacebar
        if (e.keyCode === 32) {
            audio.paused ? audio.play() : audio.pause();
        }

        // Right arrow
        if (e.keyCode === 39) {
            // Forward by 10 sec.
            audio.currentTime += 10;
        }

        // Left arrow
        if (e.keyCode === 37) {
            // Backward by 10 sec
            audio.currentTime -= 10;
        }

        // Up arrow
        if (e.keyCode === 38) {
            // Volume up
            if (audio.volume < 1.0) {
                audio.volume += 0.1;
            }
        }

        // Arrow down
        if (e.keyCode === 40) {
            // Volume down

            if (audio.volume === Math.max(0, audio.volume - 0.01)) {
                return;
            }

            if (audio.volume >= 0.0) {
                audio.volume -= 0.1;
            }
        }
    };

    audio.addEventListener('play', onPlaying);
    audio.addEventListener('pause', onPaused);
    audio.addEventListener('timeupdate', onTimeUpdate);

    document.addEventListener('keydown', onKeyPress);
    progress.addEventListener('click', onProgressUpdate);
    playButton.addEventListener('click', onPlayStart);
})();
(()=>{
const audio=document.querySelector('audio');
const playButton=document.getElementById('play');
const progress=document.querySelector('.player_uuprogress');
const progressBar=document.querySelector('.player\uuuuuu progress\uuuu inner');
const next=document.getElementById('next');
const prev=document.getElementById('previous');
const title=document.querySelector('.title');
const status=document.querySelector('.status');
const poster=document.querySelector('.player\uuu image');
如果(!音频){
返回;
}
//点击播放按钮。
const onPlayStart=()=>{
audio.pause?audio.play():audio.pause();
};
//关于音频播放。
const onPlaying=()=>{
playButton.innerHTML=`;
//如果当前正在播放,请更改标题。
//status.innerText=`status:Wordt afgespeeld.`;
};
//关于音频暂停。
const onPaused=()=>{
playButton.innerHTML=`;
//如果当前已暂停,请更改标题。
//status.innerText=`status:Is gepauzeerd.`;
};
//更新进度条
const onTimeUpdate=()=>{
常数百分比=(audio.currentTime/audio.duration)*100;
progressBar.style.width=`${percent}%`;
};
//点击更新进度
const onProgressUpdate=(e)=>{
audio.currentTime=(e.offsetX/progress.clientWidth)*audio.duration;
};
const onKeyPress=(e)=>{
e、 预防默认值();
//空格键
如果(例如keyCode===32){
audio.pause?audio.play():audio.pause();
}
//右箭头
如果(例如keyCode===39){
//前进10秒。
audio.currentTime+=10;
}
//左箭头
如果(例如keyCode===37){
//后退10秒
audio.currentTime-=10;
}
//向上箭头
如果(例如keyCode===38){
//增大音量
中频(音频音量<1.0){
音频音量+=0.1;
}
}
//向下箭头
如果(例如keyCode===40){
//音量下降
if(audio.volume==数学最大值(0,audio.volume-0.01)){
返回;
}
如果(audio.volume>=0.0){
音频音量-=0.1;
}
}
};
audio.addEventListener('play',onPlaying);
audio.addEventListener('pause',onPaused);
audio.addEventListener('timeupdate',onTimeUpdate);
文件。添加的文件列表器(“键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键控键);
progress.addEventListener(“单击”,在ProgressUpdate上);
playButton.addEventListener('单击',开始播放);
})();

您可以使用以下功能。它们检查某个值是否达到某个阈值,如果没有,则进行计算,否则只返回该值

这意味着,对于增量,它会一直添加,直到达到
1
,然后只返回
1
,而不向上计数,从而有效地停止增量

计算是因为浮点数不精确。这确保每个值都是一个精确的小数点(
0.1
0.2
0.3
,等等)

const incrementVolume = value => 
    value < 1 ? (value * 10 + 1) / 10 : value;

const decrementVolume = value => 
    value > 0 ? (value * 10 - 1) / 10 : value;
// Arrow up
if (e.keyCode === 38) {
  // Volume up
  audio.volume = incrementVolume(audio.volume);
}

// Arrow down
if (e.keyCode === 40) {
  // Volume down
  audio.volume = decrementVolume(audio.volume);
}