如何在Node.js中实现带预设选项的箭头键交互式选择功能?
在Node.js中实现带预设选项的交互式下拉选择功能
完全可以实现,下面提供两种方案:原生Node.js API实现(无第三方依赖)和使用成熟的第三方库简化开发。
方案一:原生Node.js实现
利用Node.js的readline模块监听键盘输入,结合控制台输出控制来模拟下拉选择交互:
const readline = require('readline'); // 预设选项 const options = ['红', '绿', '蓝']; let selectedIndex = 0; // 创建readline接口 const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true }); // 开启键盘按键监听 process.stdin.setRawMode(true); process.stdin.resume(); process.stdin.on('keypress', (str, key) => { // 处理回车键:确认选择 if (key.name === 'return') { console.log(`\n你选择了:${options[selectedIndex]}`); process.stdin.setRawMode(false); rl.close(); process.exit(); } // 处理上箭头:选中上一个选项 if (key.name === 'up') { selectedIndex = (selectedIndex - 1 + options.length) % options.length; renderOptions(); } // 处理下箭头:选中下一个选项 if (key.name === 'down') { selectedIndex = (selectedIndex + 1) % options.length; renderOptions(); } // 处理Ctrl+C退出 if (key.ctrl && key.name === 'c') { process.stdin.setRawMode(false); rl.close(); process.exit(); } }); // 渲染选项列表的函数 function renderOptions() { // 清屏并将光标移到开头 readline.cursorTo(process.stdout, 0, 0); readline.clearScreenDown(process.stdout); console.log('请选择一个颜色:'); options.forEach((option, index) => { const prefix = index === selectedIndex ? '< ' : ' '; console.log(`${prefix}${option}`); }); } // 初始渲染 renderOptions();
代码说明:
- 使用
readline模块处理终端输入输出,开启rawMode以监听单个按键 - 通过
keypress事件捕获上下箭头和回车键,更新选中索引并重新渲染选项 renderOptions函数负责清屏并重新绘制选项列表,用<标记当前选中项- 支持Ctrl+C退出程序
方案二:使用第三方库(inquirer.js)
如果不想自己处理底层交互逻辑,inquirer.js是Node.js生态中常用的交互式命令行工具库,一行代码就能实现下拉选择:
- 先安装依赖:
npm install inquirer
- 实现代码:
const inquirer = require('inquirer'); inquirer .prompt([ { type: 'list', name: 'color', message: '请选择一个颜色:', choices: ['红', '绿', '蓝'] } ]) .then(answers => { console.log(`你选择了:${answers.color}`); });
说明:
type: 'list'对应下拉选择交互,自动支持箭头键切换、回车确认- 内置了完善的错误处理和用户交互逻辑,无需手动处理键盘事件
内容的提问来源于stack exchange,提问作者Koby K
相关产品推荐
相关产品推荐

