javascript - 当鼠标悬停在 DOM 中的特定元素上时订阅
问题描述
当鼠标悬停在 DOM 中的特定元素上时,我需要订阅并执行一些操作。
例如:home.component.html
<div class="container">
<div class="row1"> </div>
<div class="row2"> </div>
<div class="row3"> </div>
</div>
home.component.ts:
import {
AfterViewInit,
Component,
Input,
OnInit,
} from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss'],
})
export class homeComponent implements OnInit {
public hover: boolean;
constructor() {}
ngOnInit(): void {
this.hover= true; // it may be false also.
}
}
在上面的示例中,当鼠标悬停在 row1 和 row3 元素上时,我需要订阅。我还需要检查一个名为“悬停”的变量,如果它是真的,那么我只需要执行上述操作(鼠标悬停)。如果变量为假,则无需检查鼠标悬停(无需执行任何操作),只需取消订阅即可。任何人都可以帮助我实现这一目标。
解决方案
如果您想订阅来自多个元素的事件,您可以在您的 2 个元素 row1 和 row2 上使用 fromEvent,合并它们并相对于您的悬停布尔值进行过滤,如果触发了两个悬停事件之一,则 combineLastest 将发出一个值
import { merge, fromEvent } from 'rxjs';
import { map, filter } from 'rxjs/operators';
@ViewChild('row1', { static: true }) row1: ElementRef;
@ViewChild('row2', { static: true }) row2: ElementRef;
merge(
fromEvent(this.row1.nativeElement, 'mouseover'),
fromEvent(this.row2.nativeElement, 'mouseover')
).pipe(
filter(_ => !!this.hover),
map((event) => {
// some control here
})
).subscribe();
推荐阅读
- docker - 无法使用 Sarama Golang 包创建 Kafka 生产者客户端-“客户端/元数据在获取元数据时从代理收到错误:EOF”
- ruby-on-rails - 为什么此块不适用于我的 ERB 模板
- java - java中的备忘录。可变状态
- python - 当项目解释器设置为 conda 并且包不是由 conda 提供/列出时,如何在 PyCharm 中安装包?
- css - VSCode 更漂亮的 CSS 注释添加行?
- cassandra - 在 cassandra 中写得很重是什么意思?
- windows - 连接 PS2 键盘
- java - JVM如何能够同时处理spring单例代码?
- c# - 从 json 对象检索(反序列化)特定属性到 C# 结构(json 反序列化)
- ruby - 为什么在某些 Linux 机器上会忽略 POSIX 信号?