Skip to main content

HTML5 Canvas 使用 Konva 监听或不监听事件

要使用 Konva 监听或不监听事件,我们可以在实例化形状时将配置对象的 listening 属性设置为 true 或 false,或者可以使用 setListening() 方法设置 listening 属性。 一旦我们为一个或多个节点设置了 listening 属性,我们还需要使用 drawHit() 方法重新绘制每个受影响的层的命中图形。

说明:将鼠标悬停在椭圆上以观察事件处理程序未被执行。点击“监听”以开始监听事件,并观察事件处理程序现在被执行。

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 text = new Konva.Text({
  x: 10,
  y: 10,
  fontFamily: 'Calibri',
  fontSize: 24,
  text: '',
  fill: 'black',
});
layer.add(text);

const oval = new Konva.Ellipse({
  x: stage.width() / 2,
  y: stage.height() / 2,
  radiusX: 100,
  radiusY: 50,
  fill: 'yellow',
  stroke: 'black',
  strokeWidth: 4,
  listening: false,
});

oval.on('mouseover', function () {
  writeMessage('鼠标悬停在椭圆上');
});
oval.on('mouseout', function () {
  writeMessage('');
});

function writeMessage(message) {
  text.text(message);
}

layer.add(oval);

// 添加切换监听的按钮
const button = document.createElement('button');
button.innerHTML = '监听';
document.body.appendChild(button);
button.addEventListener('click', () => {
  const listening = !oval.listening();
  oval.listening(listening);
  button.innerHTML = listening ? '停止监听' : '监听';
  layer.drawHit();
});