KonvaJS では、イベントバブリングがデフォルトで有効になっています。これは、子要素でイベントが発生すると、そのイベントが親要素へ伝播することを意味します。そのため、レイヤーに click イベントを登録し、その上にグループを作成した場合、グループをクリックしてもそのイベントが発生します。
KonvaJS には、イベントのバブリングを防止する stopPropagation() メソッドはありません。その代わり、KonvaJS はイベント、イベントの伝達、イベントリスナーを管理する独自のイベントシステムを使用しています。
KonvaJS では、イベントオブジェクトの stopPropagation() メソッドを使用して、イベントが上位の要素へ伝播するのを防止できます。KonvaJS において、イベントオブジェクトは Konva.Collection クラスのインスタンスであり、イベント発生時に関連するすべてのノードの集合です。これを使用して、イベントの対象ノードやその他の関連ノードにアクセスできます。
例
以下のコードは、KonvaJS のイベントシステムを使用して、親要素の click イベントが発生するのを防ぐ方法を示しています。
const stage = new Konva.Stage({
container: 'container',
width: 500,
height: 500,
});
const layer = new Konva.Layer();
stage.add(layer);
const group = new Konva.Group();
group.on('click', (event) => {
// 阻止事件传播到父级元素
event.cancelBubble = true;
// 处理组的 click 事件
// ...
});
layer.on('click', (event) => {
// 在此处理父级元素的 click 事件
// ...
});
この例では、グループをクリックすると、イベントオブジェクトの cancelBubble プロパティが true に設定され、イベントが親要素へ伝播し続けるのを防ぎます。これにより、親要素の click イベントは発生しなくなります。
KonvaJS のイベントシステムはブラウザーのイベントシステムとは異なるため、その使用方法も少し異なる点に注意してください。具体的には、イベントオブジェクトには stopPropagation() メソッドがなく、代わりに cancelBubble プロパティを使用して同じ効果を実現します。
