【发布时间】:2017-04-24 11:10:04
【问题描述】:
我尝试阻止默认缩放事件并改为触发一个函数。
我设法为跨浏览器的默认保存事件(CTRL+S)做到了:
document.documentElement.addEventListener('keydown', function(e) {
e = e || window.event;
var keynum;
if (window.event) {
keynum = e.keyCode;
} else if (e.which) {
keynum = e.which;
if (e.ctrlKey) {
switch (String.fromCharCode(keynum)) {
case 'S':
console.log('CTRL S pressed');
e.preventDefault ? e.preventDefault() : (e.returnValue = false);
break;
}
}
}
});
https://codepen.io/anon/pen/NjRbaa?editors=1010
但是,CTRL++ 似乎更棘手,因为“+”符号没有跨浏览器keyCode。我尝试使用keypress 而不是keydown,但在 Chrome 和 IE 中并没有阻止默认设置。
【问题讨论】:
-
好吧,此刻的函数在控制台中打印
CTRL S pressed。 :) 但是真正的应用程序具有触发的缩放功能。但我没有最小的例子。 -
仅供参考
keyCode已弃用:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode。您可以使用keydeveloper.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key 并检查“+”。 -
并且您绝对确定您自己的缩放功能比浏览器中已经提供并针对不同系统量身定制的缩放功能更好?因为如果不这样做,您将削弱用户的浏览器体验。
-
谢谢。已经使用它是不是有点冒险?到目前为止,它只是在工作草案中。
-
这是一个权衡。人们不仅熟悉浏览器的 CTRL 和 PLUS 组合键,还熟悉其他应用程序。因此,当在 Web 浏览器中创建应用程序时,人们会面临两难境地:是否应该使用用户已经熟悉的组合键,这样他们就不必记住新的组合键或保留浏览器的默认设置。但是许多应用程序会覆盖浏览器的默认设置。例如,当您按下 CTRL S 时,请参阅 codepen 网站。只是用户在使用该应用程序时开始期待其他行为。但我同意这是一种权衡。
标签: javascript keypress keydown preventdefault