angular - 同时监听鼠标和键盘事件
问题描述
我正在尝试收听这样的滚动和 keydown 事件:
@HostListener('window:scroll', ['$event']) onScrollEvent(event){
console.log("scrolled",event)
}
@HostListener('window:keydown', ['$event']) handleKeydownEvent(event: KeyboardEvent){
console.log("ctrl pressed", event)
}
我想同时听 ctrl 和滚动,然后抓住它,这样我就可以阻止用户放大。但我不知道该怎么做,因为 hostlistener 只听一个事件
我也试过这个,但没用,我仍然可以放大
@HostListener('window:keydown', ['$event'])
@HostListener('window:scroll', ['$event'])
onEvent(event){
event.preventDefault()
console.log("looks like you just tried to zoom in")
}
我该怎么做呢?
解决方案
您可以使用rxjs
merge
运算符来完成这项工作
import { merge, Subject } from 'rxjs';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// Define a Subject to hold scroll event
onScorll$ = new Subject();
// Define a Subject to hold keydown event
onkeydown$ = new Subject();
// Define var to hold both of events
both$;
@HostListener('window:scroll', ['$event']) onScrollEvent(event){
// console.log("scrolled",event)
this.onScorll$.next(event);
}
@HostListener('window:keydown', ['$event']) handleKeydownEvent(event: KeyboardEvent){
// console.log("ctrl pressed", event)
this.onkeydown$.next(event);
}
constructor() {
// We set both$ to listen to our events simultaneously
this.both$ = merge(this.onScorll$, this.onkeydown$)
// We subscribe to it to make it actually work
//
this.both$.subscribe((event) => {
// Each time event occur you will be notified here
// So you can do something like this to prevent it
if(this.zoomEnabled) {
event.preventDefault();
}
})
}
}
推荐阅读
- java - 创建一个假麦克风以使用/转储音频
- python - 如何在没有身份验证的情况下访问谷歌表格?
- key - 如何在 Embarcadero C++Builder 中检测 Ctrl+P 组合键
- apache-spark - 尝试在本地模型中提交 Spark 应用程序,出现以下错误“无法从 JAR 加载主类”
- computer-vision - 我需要在 torch.vison 的行级别中为 21 个班级写什么?
- git - Git:为什么我的文件被结帐覆盖?
- java - 使用 Java,我需要修改我之前制作的 AgeGuess 程序,以执行以下实验 2 练习 1 中所写的以下操作
- html - 循环中列 div 之间的间距
- java - 应用继承时对“this”的常规解释
- python - pip install dlib 在 virtualenv 中找不到 Python.h