Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拿着一把钥匙可以重复它的目的_Javascript_Html - Fatal编程技术网

Javascript 拿着一把钥匙可以重复它的目的

Javascript 拿着一把钥匙可以重复它的目的,javascript,html,Javascript,Html,我有一个小问题,我在浏览器中使用JavaScript制作了一架钢琴,它使用键盘键。我只需要javascript,jquery现在不是我的选项 问题是,当我按住一个键时,噪音会不断重复,我希望每次按下一个键时,即使我按住它几秒钟,它也只会播放一次 我该怎么做 <audio id="do"> <source src="do.mp3" type="audio/mp3"></audio> <script> var do1 = documen

我有一个小问题,我在浏览器中使用JavaScript制作了一架钢琴,它使用键盘键。我只需要javascript,jquery现在不是我的选项

问题是,当我按住一个键时,噪音会不断重复,我希望每次按下一个键时,即使我按住它几秒钟,它也只会播放一次

我该怎么做

<audio id="do"> 
<source src="do.mp3" type="audio/mp3"></audio>


<script>

    var do1 = document.getElementById('do');

    function load1()
    {
        do1.load();
    }

    document.addEventListener('keydown',function(event) {
        if(event.keyCode == 90) {{do1.load()
            do1.play();
        }}

    });
</script>

在第一个按键向下事件上添加一个标志,该标志在按键向上事件上重置,并防止随后的按键向下事件触发多次而同时不释放按键

var prevent = false;

document.addEventListener('keydown',function(event) {
    if(event.keyCode == 90 && !prevent) {
        prevent = true;
        do1.load()
        do1.play();
    }
});

document.addEventListener('keyup',function(event) {
    prevent = false;
});

但是,一个问题可能是,在释放密钥之前,当焦点设置在其他位置时,可能无法接收keyup事件。我不知道有任何捕捉键机制可以防止…

您可以使用keyup@user3805513@Arvind这会在你释放键时播放,对于键盘来说几乎不现实。@Arvind:那会延迟输入相当多时间。另一个解决方案是,尽管复制使用jQuery,但所涉及的原则是基本的JavaScript,可以在这里应用:当您为您的意图添加解释时,它将对OP和其他访问者更有帮助。谢谢。@kshayk忘记实际设置国旗了,对不起!现在试一试:-但是还有一个问题,它不允许我用你在那里做的代码一起玩几个键..有什么建议吗?好的,我为evey note做了一个不同的prevent var,它可以工作: