【发布时间】:2022-01-22 01:33:28
【问题描述】:
我正在尝试在鼠标单击后检测修饰键 keyup 事件。
一些背景:检测到的鼠标点击被 Sketchfab 查看器 API 捕获,如文档 here 所述。 API 不会返回在单击时是否按下了任何修饰键。
但是,我希望 UI 根据是否按下修饰键来执行不同的操作。
我尝试检测并跟踪修饰键向下/向上事件,如下所示:
var c = {} // this is actually a vue.js object
c.keyModifiers = { ctrlKey: false, altKey: false, shiftKey: false }
window.addEventListener("keydown", function(event) {
if ([16, 17, 18].includes(event.keyCode) ) {
Object.keys(c.keyModifiers)
.forEach(k => {
c.keyModifiers[k] = event[k]
})
}
}, true);
window.addEventListener("keyup", function(event) {
if ([16, 17, 18].includes(event.keyCode) ) {
Object.keys(c.keyModifiers)
.forEach(k => {
c.keyModifiers[k] = event[k]
})
}
}, true);
但点击后不再检测到 keyup 事件(keydown 效果很好)。
我尝试过/想到的其他事情:
- 检测窗口中任意位置的点击:似乎不起作用,可能是因为 Sketchfab 查看器是 iframe
- 有一个 setInterval 循环检查按键是否被按下:似乎没有办法做到这一点
在这种情况下如何检测是否按下了修饰键?
【问题讨论】:
-
为什么keyup很重要?你得到相同的代码。
-
因为我需要知道点击发生时是否按下了mod键,而我没有其他方法可以做到
-
实际上这些事件的结果略有不同,但它们都会检测到 mod 键,请参阅我的 answer。
-
您是否尝试过从传递给库的处理程序访问本机
window.event?如果该库只是同步包装(鼠标)事件,它应该是可访问的(虽然 hack-ish)并方便地为您提供altKey/shiftKey/metaKey属性。 developer.mozilla.org/en-US/docs/Web/API/Window/event -
无论如何,症状“keydown 事件侦听器触发,但在我单击某些东西后 keyup 没有”听起来像单击静默聚焦不同的文档。毕竟没有更多个iframe在玩吗?
标签: javascript