微信下输入法在IOS和安卓下的诡异

1.window.innerHeight

系统版本iOS9.1.1安卓4.4.4
没有输入法的情况下504567
有输入法的情况下208273

 

 

 


两者的window.innerHeight都不包括输入法的那部分,$('#id').css("bottom")都是相对输入法上面区域来定位的,也就是window.innerHeight来定位的。

2.window.outerHeight

系统版本iOS9.1.1安卓4.4.4
没有输入法的情况下01134
有输入法的情况下0545

 

 

 

IOS不支持outerHeight属性,郁闷!

3.(document.documentElement||document.body).clientHeight

系统版本iOS9.1.1安卓4.4.4
没有输入法的情况下504567
有输入法的情况下504273

 

 

 

看来两者的又有差异,IOS下clientHeight包括输入法部分,安卓不包括clientHeight部分。

4.验证元素的高度变化

例如:$('#id').css("height");                     //节点的文档高度,绝对定位,按照bottom来确定位置的。

系统版本iOS9.1.1安卓4.4.4
没有输入法的情况下353px408px
有输入法的情况下353px114px

 

 

 

可以见得:有无输入框法,ios下高度没有变化,安卓就非常好的适应了,这是个IOS下的bug哦。

验证上面元素内部元素的高度变化趋势(内部元素高度是动态变化的),例如:$('#innerid').css("height");

iOS9.1.1:     311px----663px----929px---1195px;

安卓4.4.4:   357px---573px----870px---1192px;

可以见得:变化的趋势是OK的。

5.导致的问题

在IOS下,当输入法推上去的时候,页面的内容也回推上去,内容只有window.innerHeight高度的内容了,又由于clientHeight没有变化,而输入框就占领了一部分。

同时页面元素的高度没有变化,导致元素的滚动条展开不了,那么必然会失去一部分内容,失去的内容的高度就是输入法的高度。解决之道:

第一步:$('#id').css("height",window.innerHeight);            //把元素的高度设置为window.innerHeight

第二步:由于内容是向上消失的,所以要用元素的top定位。

     var inputHeight = (document.documentElement||document.body).clientHeight-window.innerHeight;  //输入法的高度 

     $('#id').css('top',inputHeight);

动作对UI的渲染太大,用setTimeout来延迟执行。

目前搞到的就是这些,有什么牛B的好办法就好了。

转载于:https://www.cnblogs.com/liuyinlei/p/4934452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值