Android WebVIew中的键盘长键按下
Posted
技术标签:
【中文标题】Android WebVIew中的键盘长键按下【英文标题】:Keyboard Long Key Press in Android WebVIew 【发布时间】:2021-09-26 16:45:27 【问题描述】:任何人都知道如何在 android WebView 中处理长按键盘键。我以为我可以简单地使用 KeyboardEvent repeat 属性 (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat) 但是当我使用以下代码对其进行测试时,尽管按住键,但返回的重复属性始终为 false。
document.addEventListener('keydown', logKey);
function logKey(event)
console.log(event.repeat);
上面的代码在桌面浏览器上按预期工作并返回一次 false,然后重复返回 true,同时按住一个键。但是在 Android WebView 中,它反复返回 false。
您知道问题出在哪里,或者有另一种处理长键盘按键的方法吗?
更新 为了澄清,我试图绑定到长按键事件而不是忽略它。如果一个键被按住一段时间,我想触发一个函数。
【问题讨论】:
【参考方案1】:你可以重写document.onkeydown函数,然后通过抗抖动机制处理对应的key值。毕竟,我们需要处理的是键值,而不是长键。代码如下:
var throttle = function(func, delay)
var prev = Date.now();
return function()
var context = this;
var args = arguments;
var now = Date.now();
if (now - prev >= delay)
func.apply(context, args);
prev = Date.now();
function onkeypress(evt)
var keycode = evt.which ? evt.which : evt.keyCode;
console.log(keycode);
document.onkeypress = throttle(onkeypress, 500);
【讨论】:
感谢您的回复。您能否详细说明关于使用“抗抖动机制”的含义?例如,我将如何听长按 Enter 键? 在Android上,长按键表示一段时间内上报了很多按键事件,但您只需要在指定时间内处理一次即可。 再次感谢您的回复,但除非我弄错了,否则这不会按预期工作。使用此代码,如果我按下 Enter 键一次,然后只需等待超过半秒的延迟,然后再次按下,就会触发该功能。我想要相反的行为,只有在您按住 enter 键指定的时间量时才会触发该功能。 可以减少油门功能的时间,如:document.onkeypress = throttle(onkeypress, 150); 糟糕,也许你应该处理 onkeyup 函数。以上是关于Android WebVIew中的键盘长键按下的主要内容,如果未能解决你的问题,请参考以下文章