angular - 角度检测鼠标左键单击和鼠标右键单击
问题描述
我是 Angular 的新手,我一直在尝试使用它重新创建 Minesweeper。我在检测左键单击以显示磁贴和右键单击以标记磁贴方面取得了成功,但我不确定如何检测同时按下鼠标左键和右键以显示更大区域。有没有办法检测到呢?
解决方案
进口HostListener
import { HostListener } from "@angular/core";
在右键单击事件上,使用contextmenu
事件。
@HostListener("contextmenu", ["$event"])
onRightClick(event) {
//your code here
}
在左键单击事件上,使用click
事件。
@HostListener("click", ["$event"])
onClick() {
//code here
}
对于两次点击,添加timeout
到每个右键和左键点击事件,因为大多数情况下两个点击不能同时触发,一次点击将始终领先于另一次点击,如果有继续点击则执行。在我的工作代码中,右键单击仍然会在两次单击时触发。我不知道这是否是因为,preventdefault
但是如果同时执行了两次单击,您可以添加另一个条件,那么您已经可以执行右键单击了。
在此处查看工作代码:https ://stackblitz.com/edit/angular-ivy-yzh4wh
right_clickOnly: boolean = true;
left_clickOnly: boolean = true;
@HostListener("contextmenu", ["$event"])
onRightClick(event) {
event.preventDefault();
this.right_clickOnly = false;
if (!this.left_clickOnly) {
this.performBothClick();
event.stopPropagation();
} else {
setTimeout(() => {
this.right_clickOnly = true;
this.right_click += 1;
}, 300);
// this.right_clickOnly = false;
}
}
@HostListener("click", ["$event"])
onClick() {
this.left_clickOnly = false;
if (!this.right_clickOnly) {
this.performBothClick();
} else {
setTimeout(() => {
this.left_clickOnly = true;
this.left_click += 1;
}, 300);
// this.left_clickOnly = false;
}
}
performBothClick() {
this.both_click +=1;
this.right_clickOnly = true;
this.left_clickOnly = true;
}
推荐阅读
- ruby-on-rails - 无法再运行单个 SitePrism 功能规格
- android - 有什么方法可以获取有关我们的 Android 手机中传入和传出文件的文件数量的信息
- bash - 如何使用预定义数量的进程通过bash中的程序处理多个文件?
- drools - 如何修复分数 DRL 和 kmodule.xml 错误
- database - 将许多小文件从内存存储到云存储的最佳方式
- google-chrome - 防止弹出窗口关闭时关闭开发人员工具窗口
- .htaccess - .htaccess 将结果重写为 www.www
- wordpress - 有没有办法在假网址下加载现有页面?
- php - 尝试在 CURL POST 调用中发送文件时出错
- javascript - amCharts3 系列图表可以设置特定的 x 轴吗?