将 div 悬停在 NgClass 上
Hover a div with NgClass
我正在尝试使用 Angular ngClass 指令对 div 产生悬停效果。在模板文件中,我有一个带有 class "list-item-container' which contains a div with class "list-item" 的 div 元素,它使用 *ngFor 指令进行迭代。在 "list-item" div 元素内我有三个带 class "list-item-column" 的 div,它们水平放置,就像带内联显示的 table 行。在 div 和 "list-item" class 我在我的 .ts 文件中放置了一个调用 hoverListItem() 的 mouseenter 和 mouseleave 事件监听器。hoverListItem() 函数将 listItemHovered 变量的值更改为 true 或 false。在 "list-item" class 我有一个 ngClass 指令,它根据 listItemHovered 布尔值的值触发 css class 'list-item-highlight',然后将背景更改为不同的颜色。
我面临的问题是,将鼠标指针悬停在 "list-item" div 上时,我所有的 "list-item" div 都会受到影响,而不是我本人盘旋过来。如何解决这个问题?
.html 文件
<div class="list-item-container">
<ng-container *ngFor="let opportunity of dealService.opportunities">
<div [ngClass]="{'list-item-highlight': listItemHovered}" class="list-item" (mouseenter)="hoverListItem()"
(mouseleave)="hoverListItem()"
(click)="selectOpportunity(opportunity)">
<div
class="list-item-column">{{opportunity.account?.name === null ? "N/A" : opportunity.account.name}}</div>
<div class="list-item-column">{{opportunity.requirementTitle}}</div>
<div class="list-item-column">{{opportunity.salesValue | number: '1.0-2'}}</div>
</div>
</ng-container>
</div>
.css 文件
.list-item-container{
overflow: auto;
width: 100%;
max-height: 500px;
}
.list-item{
font-size: 15px;
border-radius: 10px ;
margin-top: 5px;
height: 50px;
background: lightgray;
color: black;
}
.list-item-highlight{
background: #7e00cc;
color: white;
}
.list-item-column{
height: inherit;
vertical-align: center;
display: inline-block;
width: 33.33%;
padding-left: 40px;
}
.ts 文件
hoverListItem() {
this.listItemHovered = !this.listItemHovered;
}
现在您正在组件上下文中创建和修改 listItemHovered
标志,您应该为每个项目级别维护一个标志,这有助于轻松识别组件是否已突出显示。
[ngClass]="{'list-item-highlight': opportunity.listItemHovered}"
(mouseenter)="hoverListItem(opportunity)"
(mouseleave)="hoverListItem(opportunity)"
组件
hoverListItem(opportunity) {
opportunity.listItemHovered = !opportunity.listItemHovered;
}
虽然我建议使用 :hover
伪 class 如果要求只是在悬停时突出显示元素。这可以通过更改 CSS 规则轻松实现。这样可以节省几个变化检测周期运行.
.list-item:hover {
background: #7e00cc;
color: white;
}
我建议使用 directive
来监听目标元素上的悬停事件并附加 class:
@Directive({
selector: '[hoverDir]'
})
export class HoverOverDirective {
@HostListener('mouseenter') onMouseEnter() {
this.elementRef.nativeElement.class = 'list-item-highlight';
}
@HostListener('mouseleave') onMouseLeave() {
this.elementRef.nativeElement.class = 'list-item-not-highlight';
}
}
或者最简单的方法是使用 CSS pseudo property :hover
并按如下方式使用它:
.list-item:hover {
background: #7e00cc;
color: white;
}
我正在尝试使用 Angular ngClass 指令对 div 产生悬停效果。在模板文件中,我有一个带有 class "list-item-container' which contains a div with class "list-item" 的 div 元素,它使用 *ngFor 指令进行迭代。在 "list-item" div 元素内我有三个带 class "list-item-column" 的 div,它们水平放置,就像带内联显示的 table 行。在 div 和 "list-item" class 我在我的 .ts 文件中放置了一个调用 hoverListItem() 的 mouseenter 和 mouseleave 事件监听器。hoverListItem() 函数将 listItemHovered 变量的值更改为 true 或 false。在 "list-item" class 我有一个 ngClass 指令,它根据 listItemHovered 布尔值的值触发 css class 'list-item-highlight',然后将背景更改为不同的颜色。
我面临的问题是,将鼠标指针悬停在 "list-item" div 上时,我所有的 "list-item" div 都会受到影响,而不是我本人盘旋过来。如何解决这个问题?
.html 文件
<div class="list-item-container">
<ng-container *ngFor="let opportunity of dealService.opportunities">
<div [ngClass]="{'list-item-highlight': listItemHovered}" class="list-item" (mouseenter)="hoverListItem()"
(mouseleave)="hoverListItem()"
(click)="selectOpportunity(opportunity)">
<div
class="list-item-column">{{opportunity.account?.name === null ? "N/A" : opportunity.account.name}}</div>
<div class="list-item-column">{{opportunity.requirementTitle}}</div>
<div class="list-item-column">{{opportunity.salesValue | number: '1.0-2'}}</div>
</div>
</ng-container>
</div>
.css 文件
.list-item-container{
overflow: auto;
width: 100%;
max-height: 500px;
}
.list-item{
font-size: 15px;
border-radius: 10px ;
margin-top: 5px;
height: 50px;
background: lightgray;
color: black;
}
.list-item-highlight{
background: #7e00cc;
color: white;
}
.list-item-column{
height: inherit;
vertical-align: center;
display: inline-block;
width: 33.33%;
padding-left: 40px;
}
.ts 文件
hoverListItem() {
this.listItemHovered = !this.listItemHovered;
}
现在您正在组件上下文中创建和修改 listItemHovered
标志,您应该为每个项目级别维护一个标志,这有助于轻松识别组件是否已突出显示。
[ngClass]="{'list-item-highlight': opportunity.listItemHovered}"
(mouseenter)="hoverListItem(opportunity)"
(mouseleave)="hoverListItem(opportunity)"
组件
hoverListItem(opportunity) {
opportunity.listItemHovered = !opportunity.listItemHovered;
}
虽然我建议使用 :hover
伪 class 如果要求只是在悬停时突出显示元素。这可以通过更改 CSS 规则轻松实现。这样可以节省几个变化检测周期运行.
.list-item:hover {
background: #7e00cc;
color: white;
}
我建议使用 directive
来监听目标元素上的悬停事件并附加 class:
@Directive({
selector: '[hoverDir]'
})
export class HoverOverDirective {
@HostListener('mouseenter') onMouseEnter() {
this.elementRef.nativeElement.class = 'list-item-highlight';
}
@HostListener('mouseleave') onMouseLeave() {
this.elementRef.nativeElement.class = 'list-item-not-highlight';
}
}
或者最简单的方法是使用 CSS pseudo property :hover
并按如下方式使用它:
.list-item:hover {
background: #7e00cc;
color: white;
}