【发布时间】:2019-08-19 19:26:12
【问题描述】:
我的网络应用程序有键盘快捷键,需要按住空格键。问题是按住空格键时鼠标光标消失了。我认为正在发生的事情是浏览器试图向下滚动(即使在我的情况下,从来没有任何东西可以向下滚动)。如果用户在按住空格键的同时移动鼠标光标,则光标会在视图中闪烁,只有在鼠标停止移动时才会再次消失。一旦用户释放空格键,鼠标光标将保持隐藏状态,直到鼠标再次移动,之后光标保持可见。这发生在 Chrome、Safari、Opera (webkit/blink) 中。
在很多事情中,我在事件上尝试了preventDefault() 的规范解决方案,无论我在哪里听,它都不起作用。显然,这是可能的,因为在此之前我使用的应用程序使用空格键来执行除向下滚动之外的其他操作。
var html = document.documentElement;
var body = document.getElementsByTagName('body')[0];
document.addEventListener("keydown", function(e) {
console.log("document keydown");
e.preventDefault();
e.stopPropagation();
});
window.addEventListener("keydown", function(e) {
console.log("window keydown");
e.preventDefault();
e.stopPropagation();
});
html.addEventListener("keydown", function(e) {
console.log("html keydown");
e.preventDefault();
e.stopPropagation();
});
body.addEventListener("keydown", function(e) {
console.log("body keydown");
e.preventDefault();
e.stopPropagation();
});
document.addEventListener("keypress", function(e) {
console.log("document keypress");
e.preventDefault();
e.stopPropagation();
});
window.addEventListener("keypress", function(e) {
console.log("window keypress");
e.preventDefault();
e.stopPropagation();
});
html.addEventListener("keypress", function(e) {
console.log("html keypress");
e.preventDefault();
e.stopPropagation();
});
body.addEventListener("keypress", function(e) {
console.log("body keypress");
e.preventDefault();
e.stopPropagation();
});
注意:我的应用始终是 100% 的视口。从来没有任何理由滚动,这就是为什么我对覆盖约定的想法感到满意。
非常感谢任何帮助。
【问题讨论】:
-
当你按不同的键时会发生同样的情况吗?
-
是的,它发生在任何键上。例如。我在 Chrome 中点击这个非常 SO 页面的边缘,按空格键,光标消失,直到我再次移动鼠标。
-
您可能是 SOL,我认为您遇到了浏览器功能。即使在像 JIRA 这样使用键盘快捷键的网站上(比如“e”来编辑描述),只要按下任何键,鼠标仍然会消失。
-
嗨!您是否设法解决此问题?我正在尝试构建类似的功能(保留空间以临时切换到另一个工具),但它仅适用于修饰键。
标签: javascript scroll dom-events keyboard-events