Skip to main content

HTML5 Canvas 键盘事件与 Konva

Konva 中没有内置的键盘事件,比如 keydownkeyup

但是如何在画布上监听 keydown 或 keyup 事件?

你可以通过两种方式轻松添加它们:

  1. 监听 window 对象上的全局事件
  2. 或者通过 tabIndex 属性使舞台容器可聚焦,并在其上监听事件。

说明:点击舞台以聚焦它,使用箭头键移动形状

import Konva from 'konva';

const stage = new Konva.Stage({
  container: 'container',
  width: window.innerWidth,
  height: window.innerHeight,
});

const layer = new Konva.Layer();
stage.add(layer);

const circle = new Konva.Circle({
  x: stage.width() / 2,
  y: stage.height() / 2,
  radius: 50,
  fill: 'red',
  stroke: 'black',
  strokeWidth: 4,
});
layer.add(circle);

// 使舞台容器可聚焦
stage.container().tabIndex = 1;
// 聚焦它
// 点击舞台时也会聚焦
stage.container().focus();

const DELTA = 4;

// 添加键盘事件
stage.container().addEventListener('keydown', (e) => {
  if (e.keyCode === 37) {
    circle.x(circle.x() - DELTA);
  } else if (e.keyCode === 38) {
    circle.y(circle.y() - DELTA);
  } else if (e.keyCode === 39) {
    circle.x(circle.x() + DELTA);
  } else if (e.keyCode === 40) {
    circle.y(circle.y() + DELTA);
  } else {
    return;
  }
  e.preventDefault();
});