отменить оператор if, если другой оператор сбывается - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть эта функция, которая воспроизводит разные звуки для разных клавиш.Но если я нажимаю клавишу, а затем сразу нажимаю другую клавишу, предыдущий звук все равно будет воспроизводиться.

Мой вопрос: как отменить предыдущий звук при воспроизведении нового?

Вот код:

    
 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 голосов
/ 16 декабря 2018

Вы должны использовать «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;
        }
}
0 голосов
/ 16 декабря 2018

Я думаю, что это работает для вас:

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();
    }
}
0 голосов
/ 16 декабря 2018

На самом деле проблема не касается условия if.Но вы можете попробовать следующий код, я думаю, что он будет хорошо работать для вас.

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

var keyMap = {
    "81": "enklyd", //q
    "87": "lyd1", //w
    "69": "lyd2", //e
    "82": "lyd3", //r
    "84": "lyd4", //t
    "89": "lyd5", //y
};

var prevPlayed = null, target = null, prevTarget = null;

function checkKeyPressed(evt) {

    prevTarget = document.getElementById(keyMap[prevPlayed])
    target = document.getElementById(keyMap[evt.keyCode]);

    if (prevPlayed !== null && prevTarget !== null)
        prevTarget.pause();

    if (keyMap[evt.keyCode] && target !== null) {
        target.currentTime = 0;
        target.play();
    }

    prevPlayed = evt.keyCode;
}
0 голосов
/ 16 декабря 2018

Это на самом деле не является вопросом «остановки» оператора if, потому что они индивидуально выполняют свою работу правильно.То, что вы хотите остановить, - это воспроизводимый аудиоклип.

Для этого вы можете использовать метод .pause(), установить .currentTime на 0, или, я думаю, вы также можете установить громкость на 0и просто позволь этому разыграться.

Как уже упоминалось в комментарии, есть несколько вопросов SO, которые, возможно, уже ответили на этот вопрос.Есть ли уникальная ситуация, на которую нет ответа?

...