IOS移动端,表单input聚焦时页面放大的问题解析以及解决办法

问题原因:

      在移动端开发H5项目中,发现页面在使用 iPhone 访问的时候,点击 input 和 textarea 等文本输入框聚焦 focus() 时,页面会整体放大,而且失去焦点之后页面不能返回原来的样子。

苹果觉得点击输入框放大是一个“很好”的体验,就擅自把页面给放大了,触发机制,IOS端input字体应大于15px,否则系统会自动触发聚焦放大。

解决方案:

方法一  因为触发这个问题的本质是因为ios端 字体小于等于15px就会触发自动放大问题,所以直接修改字体为16px,然后把组件整体缩放。达到UI效果。未测试。

下两种是网上搜索最多的方法

方法二  使用mate标签强制禁止,安卓端有效,ios在10以后的版本中不接受mata标签

方法三  禁止手势触发,很多版本也说这个方法,亲测无效个人认为引发问题的原因是字体小于等于15px系统自发的放大,并非人为放大触发。

并无针对性,只是对技术的探讨。有不同的见解欢迎一起探讨

方法一:修改字体大小

input, input:focus,
textarea, textarea:focus,
select, select:focus {
  font-size: 16px !important;
}

方法二:mate 设置
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
方法二:用 JavaScript 强制修改:通过阻止手指触发放大
window.onload = function () {
  document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
  });
  document.addEventListener('dblclick', function (e) {
    e.preventDefault();
  });
  document.addEventListener('touchstart', function (event) {
    if (event.touches.length > 1) {
      event.preventDefault();
    }
  });
  var lastTouchEnd = 0;
  document.addEventListener('touchend', function (event) {
    var now = (new Date()).getTime();
    if (now - lastTouchEnd <= 300) {
      event.preventDefault();
    }
    lastTouchEnd = now;
  }, false);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值