如何防止在 NodeJS 中重复密钥
How can I prevent a key repeating in NodeJS
我正在使用 NodeJS 编写命令行实用程序,我想收集用户的原始键盘输入。但是我想防止他们长按一个键并重复该键直到他们释放键。每次按键都应该 return 一个字符,无论按键时间长短。
假设我有以下代码:
const readline = require('readline')
readline.emitKeypressEvents(process.stdin)
process.stdin.setRawMode(true)
process.stdin.on('keypress', (str, key) => {
process.stdout.write(str)
// more code
if (key.ctrl && key.name === 'c') {
process.exit(0)
}
})
如何防止按键重复?
也许您可以存储该值并设置一个计时器,以便在按下同一个键时解锁。例如:
const readline = require("readline");
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
let lastKey = "";
let lastKeyTime = 0;
process.stdin.on("keypress", (str, key) => {
// Check same key with time 0.6 sec
if (lastKey == key.sequence && new Date().getTime() - lastKeyTime < 600) {
lastKeyTime = new Date().getTime();
return;
}
// Print
process.stdout.write(str);
// Add data
lastKey = key.sequence;
lastKeyTime = new Date().getTime();
if (key.ctrl && key.name === "c") {
process.exit(0);
}
});
我正在使用 NodeJS 编写命令行实用程序,我想收集用户的原始键盘输入。但是我想防止他们长按一个键并重复该键直到他们释放键。每次按键都应该 return 一个字符,无论按键时间长短。
假设我有以下代码:
const readline = require('readline')
readline.emitKeypressEvents(process.stdin)
process.stdin.setRawMode(true)
process.stdin.on('keypress', (str, key) => {
process.stdout.write(str)
// more code
if (key.ctrl && key.name === 'c') {
process.exit(0)
}
})
如何防止按键重复?
也许您可以存储该值并设置一个计时器,以便在按下同一个键时解锁。例如:
const readline = require("readline");
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
let lastKey = "";
let lastKeyTime = 0;
process.stdin.on("keypress", (str, key) => {
// Check same key with time 0.6 sec
if (lastKey == key.sequence && new Date().getTime() - lastKeyTime < 600) {
lastKeyTime = new Date().getTime();
return;
}
// Print
process.stdout.write(str);
// Add data
lastKey = key.sequence;
lastKeyTime = new Date().getTime();
if (key.ctrl && key.name === "c") {
process.exit(0);
}
});