【发布时间】:2018-09-16 05:21:05
【问题描述】:
我有这段代码:
process.stdin.setRawMode(true).resume();
process.stdin.on('data', (buf) => {
const str = String(buf);
const charAsAscii = String(buf.toString().charCodeAt(0));
switch (charAsAscii) {
case '25': // left arrow ?
console.log('left arrow');
return;
case '26': // right arrow ?
console.log('right arrow');
return;
case '27': // down arrow
console.log('down arrow');
return;
case '28': // up arrow?
console.log('up arrow');
return;
default:
console.error('default')
}
}
所有箭头键似乎都被识别为向上箭头,也就是说,所有 4 个箭头键始终匹配大小写“28” ...我正在寻找区分向上/向下/向左/右箭头键,有人知道怎么做吗?
【问题讨论】:
-
如果您在进入开关之前打印出“charAsAscii”变量,它是否会产生预期值? (我根本不是节点人,如果要求的澄清很愚蠢,很抱歉)
-
让我检查一下,不是一个愚蠢的问题
-
是的,正如我在 OP 中描述的那样,无论我按下 4 个箭头键中的哪一个,它总是代码“27”,顺便说一句,我现在在 MacOS 上
-
从标准输入获得的缓冲区包含键入的字符,但箭头键不是字符。它们和其他类似的东西被编码为转义序列。例如,序列 1B 5B 41 是“向上”箭头。使用
.charCodeAt(0)得到的只是引入该转义序列的 ASCII 转义字符 (0x1B = 27)。 -
我链接了一个骗子?