You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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生态中常用的交互式命令行工具库,一行代码就能实现下拉选择:

  1. 先安装依赖:
npm install inquirer
  1. 实现代码:
const inquirer = require('inquirer');

inquirer
  .prompt([
    {
      type: 'list',
      name: 'color',
      message: '请选择一个颜色:',
      choices: ['红', '绿', '蓝']
    }
  ])
  .then(answers => {
    console.log(`你选择了:${answers.color}`);
  });

说明:

  • type: 'list'对应下拉选择交互,自动支持箭头键切换、回车确认
  • 内置了完善的错误处理和用户交互逻辑,无需手动处理键盘事件

内容的提问来源于stack exchange,提问作者Koby K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:40:03