编程语言
首页 > 编程语言> > javascript – keydown(重复)在触发keyup事件(对于另一个键)时中断

javascript – keydown(重复)在触发keyup事件(对于另一个键)时中断

作者:互联网

这有点奇怪,所以我想我要么缺少一些明显的东西,要么就是这些事件在浏览器中实现的缺陷.

让我首先总结一个示例场景,在提供一个孤立的案例之前,这个问题就出现了;

箭头键用于移动播放器(因为只要在页面的任何位置按键,就会触发handleKeyDown函数).同样,只要释放一个键,就会触发另一个函数(handleKeyUp).

当你(玩家)按住左键时,handleKeyDown函数会被重复触发(我认为我认为这会违背你的期望和名称所暗示的内容,但是,尽管如此,这是所有浏览器的正常行为,因为我确定你懂).

所以这就是发生的事情:玩家有朝这个方向行走的方向;然后他们按下一个数字键(对于热键项目),他们继续走路,同时按住方向.这里发生的是当您释放热键项目的数字键时,玩家移动的重复就会停止!

我写了一个非常小的这种行为的例子:

<html>
<head>
    <script type='text/javascript' src='jquery-1.5.1.min.js'></script>
    <script type='text/javascript'>
        var log = {};
        var keyState = {};
        var keyCount = {'down': 0, 'up': 0};
        window.addEventListener('keydown', handleKeyDown, false);
        window.addEventListener('keyup', handleKeyUp, false);
        function handleKeyDown (e)
            {
            keyState[e.keyCode] = true;
            keyCount.down++;
            log.prepend(" ["+e.keyCode+"] ");
            return false;
            }
        function handleKeyUp (e)
            {
            keyState[e.keyCode] = false;
            keyCount.down++;
            return true;
            }
        $(function(){log = $('#log');});
    </script>
</head>
<body>
    <div id='debug'></div>
    <div id='log'></div>
</body>

你也可以在这里试试:

http://sikosoft.net/keys.html

按页面上的任意键,您将看到页面上出现keyCode.按住键时,键码会一遍又一遍地重复.

当初始键仍然被按住时,按下另一个键时,该行为变得古怪.在释放该最近的密钥时,重复从第一个密钥停止.有趣的是,如果您尝试该示例并按住一个键,然后按住第二个键,但不是释放第二个键,而是释放第一个键:第二个键继续重复.

所以似乎继续发生的是,当keyup事件被触发时,它似乎终止了在早期键上触发的keydown事件中的重复.

我已经尝试了各种各样的事情,包括在事件处理函数中使用返回false,返回true,尝试按键而不是keydown,保存键状态并继续移动,如果按钮的keystate仍然是true,但是这一切都归结为为什么当键盘被触发时,任何主动传播的keydown事件都被杀死.我已经阅读了JavaScript Madness: Keyboard Events,我没有看到任何有关这种特定行为的信息.

这是关键事件实施的设计缺陷,还是我遗漏了什么?我在Chrome,IE和&amp ;;中观察到了同样的行为. Firefox浏览器.

有什么建议或意见吗?

解决方法:

这就是操作系统/环境的工作方式,因此浏览器的工作方式也是如此.

密钥重复不应该在浏览器中另一个密钥的密钥后继续触发,因为它在其他任何地方都不会那样.打开记事本,或vim,或pico,或您使用的任何文本编辑器,并执行相同的事件序列.您会看到在键盘后,您按下的第一个键不会继续打印新的字母.这就是这些东西在操作系统中设计的方式,结果就是它们被传播到编辑器和浏览器等的方式.

标签:onkeyup,keydown,javascript,events,keypress
来源: https://codeday.me/bug/20191002/1842370.html