当前位置:首页 > VUE

vue实现键盘选择

2026-02-17 08:50:26VUE

Vue 实现键盘选择功能

在 Vue 中实现键盘选择功能通常用于列表导航、下拉菜单或表格操作。以下是几种常见实现方式:

基础键盘事件监听

通过 @keydown 监听键盘事件,结合 v-for 渲染的列表项实现选择:

<template>
  <div @keydown.down="moveDown" @keydown.up="moveUp" tabindex="0">
    <div 
      v-for="(item, index) in items" 
      :key="item.id"
      :class="{ 'active': activeIndex === index }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [...],
      activeIndex: 0
    }
  },
  methods: {
    moveDown() {
      this.activeIndex = Math.min(this.activeIndex + 1, this.items.length - 1)
    },
    moveUp() {
      this.activeIndex = Math.max(this.activeIndex - 1, 0)
    }
  }
}
</script>

使用自定义指令

创建可复用的键盘选择指令:

vue实现键盘选择

Vue.directive('key-select', {
  bind(el, binding) {
    el.tabIndex = 0
    el.addEventListener('keydown', (e) => {
      const items = el.querySelectorAll('[data-selectable]')
      let current = [...items].findIndex(item => item.classList.contains('active'))

      if (e.key === 'ArrowDown') {
        current = Math.min(current + 1, items.length - 1)
        binding.value(current)
      } else if (e.key === 'ArrowUp') {
        current = Math.max(current - 1, 0)
        binding.value(current)
      }
    })
  }
})

组合式 API 实现

在 Vue 3 中使用组合式 API:

import { ref, onMounted } from 'vue'

export function useKeyboardSelection(items) {
  const selectedIndex = ref(0)

  const handleKeyDown = (e) => {
    if (e.key === 'ArrowDown') {
      selectedIndex.value = Math.min(selectedIndex.value + 1, items.value.length - 1)
    } else if (e.key === 'ArrowUp') {
      selectedIndex.value = Math.max(selectedIndex.value - 1, 0)
    }
  }

  onMounted(() => {
    window.addEventListener('keydown', handleKeyDown)
  })

  return { selectedIndex }
}

第三方库集成

对于复杂场景,可以使用专门处理键盘导航的库:

vue实现键盘选择

  1. 安装 vue-keyboardhotkeys-js

    npm install hotkeys-js
  2. 集成示例:

    
    import hotkeys from 'hotkeys-js'

export default { mounted() { hotkeys('up,down', (e, handler) => { if (handler.key === 'down') this.moveDown() if (handler.key === 'up') this.moveUp() }) }, beforeDestroy() { hotkeys.unbind('up,down') } }


#### 无障碍访问增强

确保键盘导航符合 WAI-ARIA 标准:

```html
<div role="listbox" aria-activedescendant={`item-${activeIndex}`}>
  <div 
    v-for="(item, index) in items"
    :id="`item-${index}`"
    role="option"
    :aria-selected="activeIndex === index"
  >
    {{ item.text }}
  </div>
</div>

以上方法可根据具体需求组合使用,核心要点是正确监听键盘事件、管理选中状态,并确保组件可获得焦点。

标签: 键盘vue
分享给朋友:

相关文章

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> &l…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &l…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…