nodejs keydown/keyup 事件

Mic*_*ang 5 javascript node.js

我有兴趣查看是否可以将功能绑定到用户按下/释放键盘上的键。

到目前为止,我已经能够使用keypress模块和 process.stdin原始模式获取按键事件:

var keypress = require('keypress');
keypress(process.stdin);
process.stdin.on('keypress', function(ch, key) {
    console.log('got "keypress"', key);
    if (key && key.ctrl && key.name == 'c') {
        process.exit();
    }
});
process.stdin.setRawMode(true);
process.stdin.resume();
Run Code Online (Sandbox Code Playgroud)

甚至可以在终端中捕获键盘按下释放事件吗?

值得注意的是,我对任何浏览器实现都不感兴趣;我正在寻找在终端中在 NodeJS 中运行的东西。

谢谢,所有。

Mic*_*ang 4

所以我想出了一个解决办法stdin来解决这个问题。

基本上,我使用 SDL 库(及其节点绑定)在后台运行一个程序,监听键盘上的输入。

去做这个:

  • 确保您运行的是 Node 版本 ~0.10。(显然,0.11 中节点上的 C 绑定工作方式略有不同?)
  • 通过 homebrew安装sdlsdl_ttfsdl_image(在 Mac 上)
  • npm install --save https://github.com/creationix/node-sdl/tarball/master

然后是这样的:

var sdl = require('sdl');

sdl.init(sdl.INIT.VIDEO);

while (true) {
    var e;
    while (e = sdl.pollEvent()) {
        console.log(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

SDL_PollEvent需要使用 来初始化 SDL SDL_INIT_VIDEO,在上面的脚本中(在 Mac 上)在 Dock 中启动一个单独的应用程序,该应用程序不绘制任何内容,但需要集中精力接受输入。

虽然从技术上讲,ANSI 终端根本不支持 keyup 事件,但这种解决方法完全可以让人们在 Node 中获取 keyup 事件(尽管需要一些基于 GUI 的系统才能运行,即很可能无法通过 ssh 工作)。