【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题

这篇具有很好参考价值的文章主要介绍了【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、IOS使用Vant表单组件输入框获取焦点后放大页面问题

使用Vue+Vant做的移动端项目,在登录界面使用Vant的表单组件van-input时发现在真机测试IOS会出现获取焦点输入时会撑大原页面的宽度,每一个输入框获取到焦点就会页面就会放大一点点,需要双指缩放才能回到原来的比例。

经过一番百度后发现:

在移动端开发项目中,发现页面在使用 iPhone 访问的时候,点击 input 和 textarea 等文本输入框聚焦 focus() 时,页面会整体放大,而且失去焦点之后页面不能返回原来的样子。
手指双击页面时候也会放大
检查了下,功能上没有什么大问题,但是页面会整体放大,而且失去焦点之后页面不能返回原来的样子。用户体验不好
最后找到原因:苹果觉得点击输入框放大是一个“很好”的体验,就擅自把页面给放大了

原文链接:IOS移动端,表单input聚焦时页面放大的解决办法_祈澈菇凉的博客-CSDN博客

解决方法也是参考原po,在public/index.html文件加上

<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">

initial-scale属性控制页面最初加载时的缩放等级,即当页面第一次 load 的时候缩放比例。

maximum-scale属性控制允许用户缩放到的最大比例。

minimum-scale 属性控制允许用户缩放到的最小比例。

user-scalable 属性控制用户是否可以手动缩放。

(来自原po,仅作记录) 

修改meta后IOS没有再出现需要手动缩放这个问题了。

二、van-tab-line活跃状态样式出现问题

如图,因为项目使用的是van-tab切换账号登录和手机号登录,修改meta后发现标签下方的van-tab-line样式出现错乱,但是切换tab之后样式又没有问题了。调试后发现是van-tab-line的transform属性的值出现问题。因为暂时没有找到安卓和ios共同适配的transform的数值,所以直接改为设置活跃tab的border-bottom替代vant原来的van-tab-line

【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题,项目复盘分析类,vue.js,前端,javascript,elementui

最终效果:

 【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题,项目复盘分析类,vue.js,前端,javascript,elementui

 

 三、安卓软键盘遮挡问题

安卓输入框获取焦点后弹出软键盘,软键盘会遮住下面的输入框,看了网上很多的解决方案, 但是resize事件不生效……= =最后决定采用了比较暴力的方法 

首先判断设备:javascript - 可能这些是你想要的H5软键盘兼容方案 - 个人文章 - SegmentFault 思否

var judgeDeviceType = function () {
  var ua = window.navigator.userAgent.toLocaleLowerCase()
  var isIOS = /iphone|ipad/.test(ua)
  var isAndroid = /android/.test(ua)
  return {
    isIOS, isAndroid
  }
}

data () {
    return {
        deviceType: judgeDeviceType(),
    }
}

 然后在当前页面包裹的div动态绑定样式

<template>
    <div :style="{paddingBottom: changeBottom,overflow: 'auto'}">
        // 页面
    </div>
</template>

这个changeBottom就是软键盘的高度,默认是0px

当输入框获取到焦点(触发focus事件)时,通过changePaddingBottom方法改变changeBottom的值,产生滚动条让滚动条滚动到底部

              <van-field
                  v-model.trim="loginForm.userName"
                  placeholder="请输入账号"
                  class="mb-6"
                  clearable
                  :rules="userNameRules"
                  ref="userName"
                  show-error-message
                  @focus="changePaddingBottom"
              />
    changePaddingBottom() {
      if (this.deviceType.isAndroid) {
        clearTimeout(this.timer1)
        this.changeBottom = '75%'
        if(app.scrollTop === 0) {
          this.timer1 = setTimeout(() => {
            app.scrollTo(0, app.scrollHeight)
          },50)
        }
      }
    },

最终效果

【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题,项目复盘分析类,vue.js,前端,javascript,elementui

 如果有更好的方法请在评论区留言,感激不尽~文章来源地址https://www.toymoban.com/news/detail-525192.html

到了这里,关于【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mpVue 微信小程序基于vant-weapp 组件的二次封装TForm 表单组件(修改源码插槽使用)

    1、mpVue微信小程序不支持动态组件(component ) 2、mpVue微信小程序不支持动态属性及事件穿透( $attrs 和 $listeners ) 3、mpVue微信小程序不支持 render 函数 TForm 表单组件 代码示例: 参数 说明 类型 默认值 className 自定义类名 String - listTypeInfo 下拉选择数据源(type:\\\'date/datetime/ra

    2024年02月16日
    浏览(70)
  • vue2与vue3项目中,分别使用element组件的message消息提示只出现一次的实现

    比如出现以上现象,想要让上一次提示没有结束,下一次提示不会出现就可以用以下方法解决 解决后的现象一:上一次提示框显示后,提示框出现的提示时间没有结束,再次点击,提示框不会有反应,在该提示的时间内一只显示,下一次提示不会出现,直到该提示的时间过了

    2024年02月02日
    浏览(41)
  • Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案

    一.问题定位 在Vite + Vue3 +Vant4构建项目时,需要使用Toast组件显示提示信息,按照官方文档使用函数调用 使用后直接报错,说是找不到对应的样式文件(如下图): 在项目中查找node-moudles文件,确实没有找到,只有一个toast文件(如下图): 在百度搜索解决方法,说是需要单

    2024年01月17日
    浏览(71)
  • vant 组件的表单校验

    vant库中存在的form表单校验是通过  rules  属性来定义校验规则的. 使用 :rules=\\\"userFrom.tel\\\" 定义校验的规则,对于手机号的校验 举例 :  例子是通过 validator 进行函数校验, vant提供的三种校验 1.通过 pattern 进行正则校验 2.通过 validator 进行函数校验 3.通过 validator 进行异步函数校验

    2024年02月10日
    浏览(40)
  • 表单验证 ---- 在Vue2中使用ElementUI进行表单验证

    目录 前言 给表单绑定对应属性 在data中定义数据对象和表单的定义规则 与数据对象双向绑定 对整个表单进行验证 在做项目时,对于表单进行验证是我们必不可少的 例如 搭建一个基本的登录界面 表单嵌套一般都是   el-form el-form-item el-input  进行验证前,我们需要先 对el-

    2024年01月20日
    浏览(41)
  • 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,设置axios,utils工具包,vue.fonfig.js配置项 (下)

    这里是创建移动端项目 【Vue】Vue2.x创建项目全程讲解,保姆级教程,手把手教,Vue2怎么创建项目(上) 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,接上一篇创建Vue2项目(中) 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,设置ax

    2024年02月13日
    浏览(53)
  • 项目实战:《智慧线上购物商城》:基于vue3+vite+vant4组件(一)

    本项目主要是基于vue3和vite以及vant4组件所开发的移动端购物商城。项目没有接口,所运用的存储数据为json数据通过axios请求,以及Localstorage等技术实现数据。 开发的模型参考以下的网站,感兴趣的小伙伴可以去看看。 AxureShop原型演示 AxureShop原型演示 https://demo.axureshop.com/?

    2024年02月02日
    浏览(96)
  • Vant 移动端UI 组件自动引入

    # Vue 3 项目,安装最新版 Vant npm i vant Vant按需引入 - - -安装: unplugin-vue-components 插件 unplugin-vue-components 插件可以在Vue文件中自动引入组件(包括项目自身的组件和各种组件库中的组件) 使用此插件后,不需要手动编写  import { Button } from \\\'ant-design-vue\\\' 这样的代码了,插件会自

    2024年02月05日
    浏览(46)
  • 微信小程序 使用 vant-weapp 组件 van-field 类型为 textarea 在IOS端出现的问题记录

    在 IOS 端 出现 textarea 的 value 出现在最顶层, 上下滚动就消失, 此bug容易引起观感不适 出现该bug的原因 可能 是官方的原生组件的使用限制 微信小程序原生组件的使用限制 提供一个 showKey 布尔值去做限制, wx:if 为 false 时使用 text/text , 为 true 时使用回 van-field type=\\\"textarea\\\"/van-fi

    2024年02月13日
    浏览(66)
  • Vue-Element-Admin项目学习笔记(9)表单组件封装,父子组件双向通信

    前情回顾: vue-element-admin项目学习笔记(1)安装、配置、启动项目 vue-element-admin项目学习笔记(2)main.js 文件分析 vue-element-admin项目学习笔记(3)路由分析一:静态路由 vue-element-admin项目学习笔记(4)路由分析二:动态路由及permission.js vue-element-admin项目学习笔记(5)路由分析

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包