如果另一个语句为真,则取消if语句

时间:2018-12-16 17:59:33

标签: javascript function if-statement html5-audio

我具有此功能,可以为不同的琴键播放不同的声音。但是,如果我按一个键,然后立即按另一个键,则先前的声音仍会播放。

我的问题是,播放新声音时如何取消上一个声音?

代码如下:

    
 window.addEventListener("keydown", checkKeyPressed, false);

    function checkKeyPressed(evt) {
        if (evt.keyCode == "81") { //q
            document.getElementById('enklyd').play();
        }
        if (evt.keyCode == "87") { //w
            document.getElementById('lyd1').play();
        }
        if (evt.keyCode == "69") { //e
            document.getElementById('lyd2').play();
        }
        if (evt.keyCode == "82") { //r
            document.getElementById('lyd3').play();
        }
        if (evt.keyCode == "84") { //t
            document.getElementById('lyd4').play();
        }
        if (evt.keyCode == "89") { //y
            document.getElementById('lyd5').play();
        }
    }

4 个答案:

答案 0 :(得分:2)

这实际上不是“停止” if语句的问题,因为他们各自正确地完成了工作。您要停止的是正在播放的声音片段。

为此,您可以使用.pause()方法,将.currentTime设置为0,或者我相信您也可以将音量设置为0,然后播放。

如评论中所述,有一些SO问题可能已经回答了这一问题。有没有一种独特的情况无法解决?

答案 1 :(得分:0)

我认为这对您有用:

var e = document.getElementById('enklyd');
function checkKeyPressed(evt) {
    if (evt.keyCode == "81") { //q
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('enklyd');
        e.play();
    }
    if (evt.keyCode == "87") { //w
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('lyd1');
        e.play();
    }
    if (evt.keyCode == "69") { //e
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('lyd2');
        e.play();
    }
    if (evt.keyCode == "82") { //r
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('lyd3');
        e.play();
    }
    if (evt.keyCode == "84") { //t
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('lyd4');
        e.play();
    }
    if (evt.keyCode == "89") { //y
        e.pause();
        e.currentTime = 0;
        e = document.getElementById('lyd5');
        e.play();
    }
}

答案 2 :(得分:0)

实际上,问题与scan.nextInt()条件无关。但是您可以尝试以下代码,我认为这对您来说很好。

if

答案 3 :(得分:0)

您应该使用'switch'而不是'if'。只需在所有元素中添加一个通用类

const yourDiv = document.querySelector('yourDiv');
window.addEventListener("keydown", checkKeyPressed, false);

function checkKeyPressed(evt) {
    yourDiv.currentTime = 0;
    switch(evt) {
        case '81':                
            document.getElementById('enklyd').play();
            break;
        case '87' :
            document.getElementById('lyd1').play();
            break;
        case '69' :
            document.getElementById('lyd2').play();
            break;
        case '82' :
            document.getElementById('lyd3').play();
            break;
        case '84' :
            document.getElementById('lyd4').play();
            break;
        case '89' :
            document.getElementById('lyd5').play();
            break;
        default :
            return null;
        }
}