首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js监听软键盘收起

在JavaScript中,监听软键盘收起可以通过监听窗口尺寸的变化来实现。以下是具体的实现方式:

基本概念

软键盘收起时,通常会导致浏览器窗口的高度发生变化。通过监听这种变化,我们可以判断软键盘是否收起。

实现方法

  1. 使用resize事件监听窗口尺寸变化: 当软键盘弹出或收起时,浏览器窗口的尺寸会发生变化,可以通过监听resize事件来检测这种变化。
  2. 记录窗口高度: 在页面加载时记录当前窗口的高度,然后在resize事件中比较当前窗口高度与记录的高度,从而判断软键盘的状态。

示例代码

代码语言:txt
复制
let initialHeight = window.innerHeight;

window.addEventListener('resize', function() {
    let currentHeight = window.innerHeight;
    if (currentHeight > initialHeight) {
        // 软键盘收起
        console.log('软键盘已收起');
        // 这里可以执行一些操作,比如重置输入框焦点等
    } else {
        // 软键盘弹出或窗口尺寸变化
        initialHeight = currentHeight;
    }
});

优势

  • 简单有效:通过监听窗口尺寸变化来判断软键盘状态是一种简单且有效的方法。
  • 兼容性好:这种方法在大多数现代浏览器中都能正常工作。

应用场景

  • 表单提交:在用户提交表单时,确保软键盘已经收起,提升用户体验。
  • 页面布局调整:根据软键盘的状态调整页面布局,避免内容被遮挡。

注意事项

  • 误判情况:窗口尺寸的变化不仅仅是由软键盘引起的,还可能是用户旋转设备、切换标签页等其他操作导致的。因此,在实际应用中可能需要结合其他条件进行判断。
  • 性能考虑:频繁触发resize事件可能会影响性能,可以通过节流(throttle)或防抖(debounce)技术来优化。

解决误判问题

为了避免误判,可以结合其他条件进行判断,例如:

  • 检测输入框焦点:只有在输入框失去焦点且窗口尺寸变化时,才认为是软键盘收起。
  • 节流处理:对resize事件进行节流处理,减少事件触发频率,提高性能。
代码语言:txt
复制
let initialHeight = window.innerHeight;
let isInputFocused = false;

window.addEventListener('focusin', function(event) {
    if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {
        isInputFocused = true;
    }
});

window.addEventListener('focusout', function(event) {
    if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {
        isInputFocused = false;
    }
});

function checkKeyboardStatus() {
    let currentHeight = window.innerHeight;
    if (!isInputFocused && currentHeight > initialHeight) {
        console.log('软键盘已收起');
        // 执行相关操作
    } else {
        initialHeight = currentHeight;
    }
}

// 使用节流函数优化resize事件处理
function throttle(func, wait) {
    let timeout = null;
    return function() {
        if (!timeout) {
            timeout = setTimeout(() => {
                func();
                timeout = null;
            }, wait);
        }
    };
}

window.addEventListener('resize', throttle(checkKeyboardStatus, 200));

通过上述方法,可以更准确地监听软键盘的收起事件,并根据需要进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

移动端那些戳中你痛点的软键盘问题及解决方法

IOS 软键盘收起表现 触发软键盘上的“收起”按钮键盘或者输入框以外的页面区域时,输入框失去焦点,软键盘收起。 Android 软键盘收起表现 触发输入框以外的区域时,输入框失去焦点,软键盘收起。...3、怎么监听键盘弹起和收起的动作 既然是键盘弹起来造成的问题,那么解决这个问题必然需要监听键盘弹起和收起的动作,那怎么监听呢。...同样参考这篇文章:WebView上软键盘的兼容方案[3] 综合上面键盘弹起和收起在 IOS 和 Android 上的不同表现,我们可以分开进行如下处理来监听软键盘的弹起和收起: Ios 在 IOS 上,...监听输入框的 focus 事件来获知软键盘弹起,监听输入框的 blur 事件获知软键盘收起。...在 Android 上,监听 webview 高度会变化,高度变小获知软键盘弹起,否则软键盘收起。 // IOS 键盘弹起:当输入框被聚焦时IOS键盘会被弹起 inputRef?.

8.9K30

【H5】209-可能这些是你想要的H5软键盘兼容方案

然而,H5 并没有直接监听软键盘的原生事件,只能通过软键盘弹起或收起,引发页面其他方面的表现间接监听,曲线救国。并且,在 IOS 和 Android 上的表现不尽相同。...听软键盘弹起和收起 综合上面键盘弹起和收起在 IOS 和 Android 上的不同表现,我们可以分开进行如下处理来监听软键盘的弹起和收起: 在 IOS 上,监听输入框的 focus 事件来获知软键盘弹起...,监听输入框的 blur 事件获知软键盘收起。...在 Android 上,监听 webview 高度会变化,高度变小获知软键盘弹起,否则软键盘收起。...isAndroid = /android/.test(ua); return { isIOS: isIOS, isAndroid: isAndroid } }() // 监听输入框的软键盘弹起和收起事件

4K12
  • 可能这些是你想要的H5软键盘兼容方案

    然而,H5 并没有直接监听软键盘的原生事件,只能通过软键盘弹起或收起,引发页面其他方面的表现间接监听,曲线救国。并且,在 IOS 和 Android 上的表现不尽相同。...IOS 软键盘收起表现 触发软键盘上的“收起”按钮键盘或者输入框以外的页面区域时,输入框失去焦点,软键盘收起。 Android 软键盘收起表现 触发输入框以外的区域时,输入框失去焦点,软键盘收起。...监听软键盘弹起和收起 综合上面键盘弹起和收起在 IOS 和 Android 上的不同表现,我们可以分开进行如下处理来监听软键盘的弹起和收起: 在 IOS 上,监听输入框的 focus 事件来获知软键盘弹起...,监听输入框的 blur 事件获知软键盘收起。...在 Android 上,监听 webview 高度会变化,高度变小获知软键盘弹起,否则软键盘收起。

    8.1K20

    自适应软键盘的Dialog以及监听软键盘弹起

    Dialog的布局要适应软键盘的弹起2. 软键盘弹起和收下的时候都会有不同的引导,所以要在Dialog上监听软键盘的弹起。 需求的解决: 一:适应键盘的弹起。...,主要是对软键盘操作的,主要有以下属性: stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 stateUnchanged:当这个activity出现时...,软键盘也总是被隐藏的 stateVisible:软键盘通常是可见的 stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态 adjustUnspecified:默认设置...其实,在清单中配置的属性本质也是告诉当前界面对软键盘这种情况的处理。...二,基于Dialog监听软键盘的弹起和收下: 其实看完第一个需求,我们可能已经猜想到,软键盘也是基于当前窗口的,它的弹起和收下肯定会引起当前窗口布局的属性发生变化,所以解决思路就有了:监听当前布局的变化

    3.5K30

    微信充值页面开发总结

    function () { let id = $('.input').val() if(id.length > 7){ getNick(id) } }, 1500)) 最后决定监听软键盘的下一步按钮...找到了在input外加form标签,使用form的submit事件的方法,可以监听ios软键盘发送按钮,但是安卓不行 $('#form').submit(function (e) { getNick...($('.input').val()) }) 还找到一个监听软键盘隐藏的事件 $(document).on('focusout', function () { 软键盘收起的事件处理 alert...('键盘收起') getNick($('.input').val()) }); 但是这个会导致查询昵称接口请求多次,也不合适 最后采用监听软键盘具体某个键的值的方式来处理,打印event.keyCode...来实测各个键盘对应的值,取得ios和安卓回退键值 8 ,安卓下一步按键值9,ios前往按键值13,区分判断 / 监听软键盘 keycode 回退8 安卓下一步9 ios前往13 $(document

    2K10

    JS监听中文输入

    在做第六个项目(根据输入框实时调用AJAX古诗匹配)时,当我们输入中文拼音,还在拼音字符状态未选择成中文时,一直在执行我编写的事件监听处理函数(当输入框里的值有变化时执行此函数, 调用AJAX在页面显示数据里包含这些字的古诗...而我想要的是在我们输入拼音未完成中文选择时,不让其执行我们的监听处理函数, 只有选择完中文后才去执行调用AJAX判断有没有包含输入的这些字的古诗。...="this_input" placeholder="中文输入未完成时不执行事件" /> js...false); console.log('完成中文输入'); }); 当我们开始进行input的输入改变了input框里的值时,js...会监听到input propertychange事件, 执行判断(一开始时$(this).prop('cnStart')的值我们没有定义,为undefined, 在监听了compositionstart

    9.5K20

    Android 底部按钮被软键盘顶起问题解决

    adjustResize 调整大小状态,这个属性表示 Activity 的主窗口总是会被调整大小来保证软键盘的显示空间。...如果界面中有可滑动控件,显示效果跟 adjustUnspecified 显示效果一样;如果界面中没有可滑动控件,软键盘可能会盖住一些控件(布局的位置不会发生变化,可能获取了焦点的控件被软键盘盖住)。...一般来说,我们的布局分为两种 底部按钮被滚动布局包裹 底部按钮不被滚动布局包裹 第一种布局是不会出现软键盘把底部按钮顶起的情况,首先软键盘的打开实际上是一个 Dialog,而我们在配置文件内的 adjustResize...从大的方向来说可以通过修改 windowSoftInputMode 来设置布局对软键盘的处理方式,当然也可以通过监听软键盘,这种修改的细粒度更小。...1、监听软键盘的打开收起 const val SOFT_KEY_BOARD_MIN_HEIGHT = 100 fun Fragment.registerFragment(bottomView: View

    2.2K20
    领券