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

如何点击上层图标而不触发下层图片的点击事件?

问题描述

我在一张图片上方叠加了一个图标,代码如下:

<font-awesome-icon class="icons bookmark" icon="fa-solid fa-bookmark"></font-awesome-icon>
<img :src="images[0]" @click.native="visit(l._id)" />

但在移动设备上点击图标时,总是会触发下层图片的点击事件。有没有办法阻止这种情况发生?

我的CSS类样式:

<style scoped>
img {
    border-radius: 25px;
    margin: 8px;
    width: calc(100% - 50%);
}

.icons.bookmark {
    font-size: 1.5em;
    z-index: 100;
    position: absolute;
    top: 20px;
    left: 1em;
}

.icons.bookmark:hover {
    color: green;
}
</style>

图标在图片上的效果:
图标叠加在图片上

解决方案

核心是阻止点击事件从图标冒泡到下层图片,以下是两种可靠的解决方法:

方法1:给图标添加点击事件并阻止冒泡

直接在<font-awesome-icon>上绑定点击事件,调用stopPropagation()阻止事件向上传递:

<font-awesome-icon 
  class="icons bookmark" 
  icon="fa-solid fa-bookmark"
  @click="$event.stopPropagation()"
></font-awesome-icon>
<img :src="images[0]" @click.native="visit(l._id)" />

如果图标本身需要执行点击逻辑,把阻止冒泡写在对应的方法里即可:

<font-awesome-icon 
  class="icons bookmark" 
  icon="fa-solid fa-bookmark"
  @click="handleBookmarkClick"
></font-awesome-icon>
methods: {
  handleBookmarkClick(event) {
    event.stopPropagation(); // 阻止事件冒泡到图片
    // 此处添加图标点击的业务逻辑
  }
}

方法2:结合CSS确保图标可捕获点击(辅助优化)

移动端偶尔会出现触摸事件穿透的情况,可以给图标添加pointer-events: auto确保它能优先接收点击事件,配合方法1使用效果更稳定:

.icons.bookmark {
    font-size: 1.5em;
    z-index: 100;
    position: absolute;
    top: 20px;
    left: 1em;
    pointer-events: auto; /* 确保图标优先响应点击 */
}

注:优先使用方法1,这是从事件机制根源解决冒泡问题的方案,兼容性和可靠性最好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28