H5页面移动端IOS键盘收起焦点错位

出现场景:IOS端,在弹出层点击input时调起键盘页面会被顶上去document.body.scrollOffset大于0,收起键盘时scrollOffset不变,造成焦点错位。

注:安卓手机点击时调起键盘不会把页面顶上去,会改变窗口高度变化,收起时不会造成影响。

jq处理:

1 $('input').on('blur', function (event) {
2   if (!(event.relatedTarget && event.relatedTarget.tagName)) document.body.scrollTop = 0;
3 });

vue处理:

1、判断移动端设备

 1 //判断 IOS 或者 Android
 2 let u = window.navigator.userAgent;
 3 //IOS终端
 4 let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
 5 //android终端
 6 let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
 7 //IOS
 8 if(isiOS) return "IOS";
 9 //Android
10 if(isAndroid) return "Android";

2、回归原本高度

 1 let type = "当前机型";//Android or IOS
 2 let isReset = true;//是否归为
 3 if (type === 'IOS') {
 4     document.body.addEventListener('focusin', () => {
 5         //软键盘弹出的事件处理
 6         isReset = false;
 7     });
 8     document.body.addEventListener('focusout', () => {
 9         //软键盘收起的事件处理
10          isReset = true;
11          setTimeout(() => {
12              //当焦点在弹出层的输入框之间切换时先不归位
13              if (isReset)    window.scroll(0, 0);//失焦后强制让页面归位
14          }, 100);
15      });
16  } else if (type === 'Android') {
17      window.onresize = function () {
18          //键盘弹起与隐藏都会引起窗口的高度发生变化
19          let resizeHeight = document.documentElement.clientHeight || document.body.clientHeight;
20          if (resizeHeight < h)    isReset = false;
21          else {
22              isReset = true;
23              setTimeout(() => {
24                   if (isReset)    window.scroll(0, 0);//失焦后让页面归位
25               }, 100);
26           }
27       }
28   } 

 

转载于:https://www.cnblogs.com/lyzw-Y/p/10783933.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值