LogoLogo
首页示例Github
  • 概述
  • 介绍
    • 安装指南
    • 快速开始
  • API 文档
    • DndContext
      • 碰撞检测算法
      • useDndContext
      • useDndMonitor
    • Droppable
      • useDroppable
    • Draggable
      • useDraggable
      • 拖动浮层
    • Sensors
      • Pointer
      • Mouse
      • Touch
      • Keyboard
    • Modifiers
  • 预置能力
    • Sortable
      • Sortable Context
      • useSortable
  • 指南
    • 无障碍指南
  • 说明
由 GitBook 提供支持
在本页
  • Activator
  • Options

这有帮助吗?

在GitHub上编辑
  1. API 文档
  2. Sensors

Keyboard

上一页Touch下一页Modifiers

最后更新于1年前

这有帮助吗?

The Keyboard sensor responds to . It is one of the default sensors used by the provider if none are defined.

In order for the Keyboard sensor to function properly, the activator element that receives the useDraggable must be able to receive focus. To learn more, read the in-depth .

Activator

The keyboard activator is the onKeyDown event handler. The Keyboard sensor is initialized if the property matches one of the start keys passed to keyboardCodes option of the Keyboard sensor.

By default, the keys that activate the Keyboard sensor are Space and Enter.

Options

Keyboard codes

This option represents the keys that are associated with the drag start, cancel and end events. The keyboardCodes options adheres to the following interface:

type KeyboardCode = KeyboardEvent['code'];

interface KeyboardCodes {
  start: KeyboardCode[];
  cancel: KeyboardCode[];
  end: KeyboardCode[];
};

The default values are:

const defaultKeyboardCodes = {
  start: ['Space', 'Enter'],
  cancel: ['Escape'],
  end: ['Space', 'Enter'],
};

Coordinates getter

By default, the Keyboard sensor moves in any given direction by 25 pixels when any of the arrow keys are pressed while dragging.

This is an arbitrary sensible default that may or may not be suited to the use case you are building.

The getNextCoordinates option can be used to define a custom coordinate getter function that is passed the latest keyboard event along with the current coordinates:

function customCoordinatesGetter(event, args) {
  const {currentCoordinates} = args;
  const delta = 50;
  
  switch (event.code) {
    case 'Right':
      return {
        ...currentCoordinates,
        x: currentCoordinates.x + delta,
      };
    case 'Left':
      return {
        ...currentCoordinates,
        x: currentCoordinates.x - delta,
      };
    case 'Down':
      return {
        ...currentCoordinates,
        y: currentCoordinates.y + delta,
      };
    case 'Up':
      return {
        ...currentCoordinates,
        y: currentCoordinates.y - delta,
      };
  }

  return undefined;
};

Scroll behavior

The other possible value is auto, which results in the scroll container being scrolled directly to the new coordinates without any animation.

You can customize these values, but keep in mind that the requires that a user must be able to activate the action associated with a draggable widget using both the enter (on Windows) or return (on macOS) and the space key. To learn more, read the in-depth .

Keep in mind that you should also customize the screen reader instructions using the screenReaderInstructions prop of if you update these values, as the screen reader instructions assume that the Keyboard sensor is initialized with the default keyboard shortcuts.

The move keyboard codes are not a customizable option, because those are handled by the . To customize them, write a custom coordinate getter function.

While the example above is fairly simple, you can build complex coordinate getters to support advanced use cases. The preset uses the getNextCoordinates option to build on top of the Keyboard sensor and move the active sortable item to its new index depending on the arrow key that is pressed.

This option represents the that should be used when scrolling to new coordinates. The default value is smooth, which results in the scroll container being scrolled smoothly to the new coordinates.

third rule of ARIA
accessibility guide
<DndContext>
Sortable
scroll behavior
coordinate getter function
Keyboard events
DndContext
Accessibility guide
event.code
listeners