You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SVG元素分层与事件冲突:实现子元素可点击同时父元素悬停事件生效

解决方案

以下方案可同时满足你的两项需求,代码改动最小:

你可以通过主动转发黄色矩形的鼠标悬停事件实现需求,由于mouseenter事件本身不支持冒泡,直接在黄色矩形的事件绑定中同步灰色矩形的悬停逻辑即可,不需要修改原有SVG元素层级和视觉效果:

import { Component, VERSION } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
  
<svg xmlns="http://www.w3.org/2000/svg" height="400px" width="400px">
  <rect x="30" y="30" width="100" height="100" fill="grey" (mouseenter)="txtg='in grey'" (mouseleave)="txtg=''" />
  <rect x="70" y="70" width="50" height="50" fill="yellow"  
      (click)="txty='yellow clicked'" 
      (mouseleave)="txty=''"
      <!-- 新增以下两行事件绑定,同步灰色块悬停状态 -->
      (mouseenter)="txtg='in grey'"
      (mouseleave)="txtg=''"
      pointer-events="all"/>
</svg>
<p>
txtg: {{txtg}}<br/>
txty: {{txty}}
  
  `,
})
export class AppComponent {
  txtg: string = '';
  txty: string = '';
}

如果后续灰色矩形的悬停逻辑有迭代,你也可以将逻辑封装为公共方法,在灰色和黄色的对应事件中统一调用即可,不需要重复维护逻辑。

内容的提问来源于stack exchange,提问作者chris01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:06:04