前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS微信浏览器input聚焦导致页面上移,不能恢复的解决方法

iOS微信浏览器input聚焦导致页面上移,不能恢复的解决方法

作者头像
德顺
发布2020-03-05 23:04:22
3.2K0
发布2020-03-05 23:04:22
举报
文章被收录于专栏:前端资源前端资源

最近开发的一个项目中有一个获取验证码功能,在测试时遇到了问题。

H5页面在iOS系统微信浏览器中,input focus 聚焦时页面会被上推,导致页面整体上移。blur 失焦后不能恢复,再次点击 input 时没反应,不能聚焦,无法输入内容,这时候需要滑动一下页面才能恢复正常。

最后发现是因为 iOS 中 input 聚焦时会导致页面上移,失焦后页面不能恢复,但是 input 会恢复之前的位置(或者说下移)。这时再点击 input 是没反应的,就好比 input 身体虽然下来了,但是魂儿还在上面,也可以理解为 input 发生了位移/偏移。

要解决这个问题,需要在 input 失焦时调整页面的位置,使其恢复正常的位置。

解决办法:

比较简单的思路, input 失焦时,页面滚动到顶部(以 jQuery 为例):

代码语言:javascript
复制
$('input').on('blur',function(){
????window.scroll(0,0);
});

javaScript 实现:

代码语言:javascript
复制
document.getElementById('#input').addEventListener('blur',?function?()?{
????window.scrollTo(0,?0)???//页面滚动到顶部
??},
??false
)

我的项目是 Vue 写的, Vue 中有一个 @blur 属性,可以直接封装一个方法,直接在失焦时调用:

代码语言:javascript
复制
<!--?HTML?code?-->
<input?@blur="inputBlur"?placeholder="请输入验证码">
代码语言:javascript
复制
/*?js?code?*/
inputBlur(){
??let?u?=?navigator.userAgent,
??isIOS?=?!!u.match(/\(i[^;]+;(?U;)??CPU.+Mac?OS?X/);
??if(isIOS){?//判断是?iOS
????setTimeout(()?=>?{
??????const?scrollHeight?=?document.documentElement.scrollTop?||?document.body.scrollTop?||?0
??????window.scrollTo(0,?Math.max(scrollHeight?-?1,?0))?//?归位
????},?20)
??}
}

监听键盘弹出关闭:可以全局引入

代码语言:javascript
复制
var?u?=?navigator.userAgent,
??flag,
??toScroll,
??isIOS?=?!!u.match(/\(i[^;]+;(?U;)??CPU.+Mac?OS?X/);
if?(isIOS)?{
??document.body.addEventListener('focusin',?()?=>?{??//软键盘弹起事件
????flag?=?true;
????clearTimeout(toScroll);
??})
??document.body.addEventListener('focusout',?()?=>?{?//软键盘关闭事件
????flag?=?false;
????if?(!flag)?{
??????toScroll?=?setTimeout(function?()?{
????????window.scrollTo({?top:?0,?left:?0,?behavior:?"smooth"?})//重点??=======当键盘收起的时候让页面回到原始位置(这里的top可以根据你们个人的需求改变,并不一定要回到页面顶部)
??????},?20);
????}?else?{
??????return
????}
??})
}?else?{
??return
}

声明:本文由w3h5原创,转载请注明出处:《iOS微信浏览器input聚焦导致页面上移,不能恢复的解决方法》 /developer/article/1594907

本文已加入 腾讯云自媒体分享计划 (点击加入)

代码语言:txt
复制
      (adsbygoogle = window.adsbygoogle || []).push({});
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决办法:
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com