js对手机软键盘的监听

本文介绍了一种在移动端网页中监听手机软键盘弹出与收起的方法。由于无法直接监听软键盘状态,可以通过输入框获取焦点的方式间接实现,但此方法在Android与iOS平台的表现不同。文中还提供了一个跨平台解决方案,利用窗口尺寸变化来判断键盘的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js还没有办法对手机软键盘直接进行监听的,但是可以有其他角度来判断软键盘是否弹起。比如输入框是否获取焦点等。
focusin和focusout支持冒泡,对应focus和blur, 使用focusin和focusout的原因是focusin和focusout可以冒泡,focus和blur不会冒泡,这样就可以使用事件代理,处理多个输入框存在的情况。

1
2
3
4
5
6
7
$(document).on('focusin'function () {
  //软键盘弹出的事件处理
});
 
$(document).on('focusout'function () {
  //软键盘收起的事件处理
});

  

但是,实际中发现这种方法仅在ios上有效,键盘弹出和键盘收起与输入框的focusin和focusout一一对应。
在android中,点击键盘上的收起按钮,键盘虽然收起了,输入框仍然处于焦点状态,并没有触发focusout事件。

经实践,发现一种变通的方法。通过比较window resize后的clientHeight与最初进来页面时的clientHeight进行对比,如果小于最初的值,那么就可以认为是键盘弹出,否则,认为键盘收起。


在android中键盘弹出和收起会改变window的高度,因此监听window的resize。

复制代码
var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
$(window).on('resize', function () {
    var nowClientHeight = document.documentElement.clientHeight || document.body.clientHeight;
    if (clientHeight > nowClientHeight) {
        //键盘弹出的事件处理
    }
    else {
        //键盘收起的事件处理
    }
});
复制代码

 

或许有人问,ios为什么不用android的解决方式呢?

因为ios的第三方键盘可能并不会导致window resize,所以无效。

附一张移动端webview对focusin、focusout的支持情况。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值