我正在开发一个待办事项列表浏览器应用程序(用JavaScript、HTML和CSS编写,没有jQuery),我想为
选项卡
和
shift+tab
,因为这些应该是缩进而不是导航。由于没有办法直接捕获键组合,我创建了
shift_pressed
检测何时
转移
按下:
document.addEventListener('keyup', function (event) {
if (event.key === 'Shift') {
shift_pressed = false;
}
});
document.addEventListener('keydown', function (event) {
if (event.key === 'Shift') {
shift_pressed = true;
} else if (event.key === "Tab") {
event.preventDefault();
if (shift_pressed) {
minus_indent();
} else {
plus_indent();
}
}
});
只要用户停留在我的选项卡上,这就非常有效。但是,当有人使用
控制+移位+制表符
要移动到浏览器中的上一个选项卡,请按
转移
在我的账单上,导致
shift_pressed
要成为的变量
true
。然后,他们在另一个选项卡上释放它,导致
shift_pressed
留下来
真的
,即使他们回来了。然后他们需要发布
转移
再次修复。
我决定,如果问题是
控制+移位+制表符
,让我们也抓住控制权。所以我这样做了:
document.addEventListener('keyup', function (event) {
if (event.key === "Control") {
ctrl = false;
}
document.addEventListener('keydown', function (event) {
if (event.key === 'Shift') {
if (!ctrl) {
shift_pressed = true;
}
} else if (event.key === "Control") {
ctrl = true;
}
只要人们浏览选项卡,这就行
只有
使用
控件+选项卡
或
控制+移位+制表符
。
当它们导航离开时,
控制
必须按下,并且当它们导航回来时,
控制
必须在我的标签上发布,所以这是有效的。
问题是,如果有人使用
控制+移位+制表符
然后
shift_pressed
可以留下来
false
但是
ctrl
变成
真的
。如果他们然后导航回来,而不是
控件+选项卡
(将设置
ctrl
返回到
虚假的
)但是通过点击浏览器中的选项卡,
ctrl
停留
真的
。这意味着
转移
被完全阻止使用,直到他们按下并释放
控制
再一次