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

Angular中*ngIf隐藏元素阻碍下层Div滚动的解决方法问询

解决Angular卡片组件滚动被遮挡的问题

问题根源

你当前的代码通过*ngFor生成了多个.item3容器,仅用*ngIf控制内部<p>标签的显示/隐藏。这意味着即使<p>被隐藏,外层的.item3 div仍然会被渲染,且所有.item3都占据Grid布局的同一区域(column 2-4,row 2-4),它们会层叠在一起。上层的空.item3会拦截鼠标滚动事件,导致下层有内容的容器无法响应滚动。

解决方案

方案1:将*ngIf移到.item3容器上(推荐)

直接控制整个.item3容器的渲染,只有匹配当前part值的容器才会被生成,从根源避免多余DOM元素:

<!-- 替换原有的.item3循环结构 -->
<div *ngFor="let i of array" class="item3" *ngIf="part == i">
     <p>{{texts[i-1]}}</p>
</div>

更高效的写法:无需循环所有项,直接根据当前part值渲染对应内容,减少不必要的DOM生成:

<div class="item3">
     <p>{{texts[part-1]}}</p>
</div>

方案2:给不匹配的.item3添加display: none样式

如果必须保留*ngFor结构,通过NgClass给不匹配的容器添加隐藏样式,让它们完全从布局中消失:

<div *ngFor="let i of array" class="item3" [ngClass]="{'hidden': part != i}">
     <p *ngIf="part == i">{{texts[i-1]}}</p>
</div>

在CSS中添加:

.hidden {
    display: none;
}

效果验证

修改后,页面上只会存在一个有效的.item3容器,没有多余的层叠元素遮挡,滚动事件就能正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:18:32