移动端软键盘监听(弹出,收起),及影响定位布局的问题

一:移动端软键盘监听(弹出,收起)

     1)监听onresize/resize(Android)

//方法一:
var winHeight = $(window).height();//获取页面的高度
$(window).resize(function(){
    var resizeHeight = $(this).height();
    if(winHeight-resizeHeight>140){
        //键盘弹出
    }else{
        //键盘收起
    }
})

//方法二:
var orignHeight = document.documentElement.clientHeight || document.body.clientHeight;
window.onresize = function(){
    var resizeHeight = this.documentElement.clientHeight || this.body.clientHeight;
    if(orignHeight - resizeHeight>140){
        //键盘弹出
    }else{
        //键盘收起
    }
}

注:140是一个预估的阀值,用来排除其他的resize操作。仅resize的高度差大于140,才被识别为软键盘交互,否则不是。如果浏览器的工具栏,搜索栏的隐藏,window的窗口页会有一个较小的变化。

      2)监听input失焦blur(IOS)

因为ios的第三方键盘可能并不会导致window.resize,所以不能使用window.resize监听,但可以通过输入框是否获取焦点  判断;(在Android中,点击键盘上的收起按钮,键盘虽然收起了,但是输入框仍然处于焦点状态,并没有触发focusout事件)

focusout和focusin支持冒泡,对应blur和focus,使用focusout、focusin是因为可以冒泡,blur、focus不会冒泡,这样就可以使用事件代理,处理多个输入框存在的情况(视情况而定)。

$(document).on('focusout',function(){
    //键盘收起事件处理
})

$(document).on('focusin',function(){
    //键盘弹出事件处理
})

二:布局问题(针对定位)

1)输入框input获取焦点时,虚拟键盘会把fixed元素顶上去(主要在部分安卓上)

$('input').bind('focus',function(){
    $('bottom_fix').css({'position':'static'});
    //或者$('viewport').height($(window).height()+'px');
}).bind('blur',function(){
    $('bottom_fix').css({'position':'fixed';'bottom':0});
    //或者$('viewport').height('auto');
})

2)屏幕旋转时出现的定位问题

$(document).bind('orientationchange',function(){
    if(window.orientation == 90 || window.orientation == -90){
        $('bottom_fix').css('position','static');
    }else{
        $('bottom_fix').css({'position':'fixed';'bottom':0})
    }
})

3)iOS下HTML页面中input获取焦点被 弹出键盘遮挡:

var u = navigator.userAgent,app = navigator.appVersion;
var isIos= !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);//ios终端
if(isIos){
    window.setTime(function(){
        window.scrollTo(0,document.body.clientHeight);
    },500)
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值