弹出软键盘时:
ios端$(‘body’).scrollTop()会改变
android端$(window).height()会改变

方法一:

ios 管用

  1. // 直接找到 input 点这个函数即可 scrollIntoView(); 前面要是 js 选择器,不能是 jq
  2. $('#price').on('focus', function () {
  3. document.querySelector("#price").scrollIntoView();
  4. })

方法二:

解决方案原理:
安卓浏览器在软键盘弹出后不会像ios浏览器那样重新计算window的高度,所以导致安卓浏览器window的高度在软键盘弹出的时候为“软键盘的高度+(window的高度-软键盘的高度)”;而其实,此时,合理的高度应该是页面的高度+软键盘弹出的高度;就此解决方案为如下:

  1. var winHeight = $(window).height(); //获取当前页面高度
  2. $(window).resize(function() {
  3. var thisHeight = $(this).height();
  4. if (winHeight - thisHeight > 50) {
  5. //当软键盘弹出,在这里面操作
  6. //alert('aaa');
  7. $('body').css('height', winHeight + 'px');
  8. } else {
  9. //alert('bbb');
  10. //当软键盘收起,在此处操作
  11. $('body').css('height', '100%');
  12. }
  13. });

方法三:(安卓和ios有用)

安卓在输入完信息之后,点击收起键盘之后,input 框还是在获取焦点,底部会留用空白;ios 不会出现这样

input 框的获取焦点事件和失去焦点事件

  1. // 获取焦点事件
  2. $("#price").on('focus', function onFocusAddr() {
  3. setTimeout(function(){
  4. // 设置body的高度为可视高度+302
  5. // 302为原生键盘的高度
  6. document.getElementsByTagName('body')[0].style.height = (window.innerHeight + 302) + 'px';
  7. document.body.scrollTop = 302;
  8. }, 300)
  9. })
  10. // 失去焦点事件
  11. $("#price").on('blur', function onFocusAddr() {
  12. // 设置body恢复原来的高度
  13. document.getElementsByTagName('body')[0].style.height = window.innerHeight + 'px';
  14. })