h5移动端常见的问题及解决方案

01、ios端兼容input高度

#问题描述

  input输入框光标,光标的高度和父盒子的高度一样,而android手机没问题

  android  

    

  ios

    

#产生原因

  通常我们习惯用height属性设置行间的高度和line-height属性设置行间的距离(行高),当点击输入的时候,光标的高度就自动和父盒子的高度一样了。(谷歌浏览器的设计原则,还有一种可能就是当没有内容的时候光标的高度等于input的line-height的值,当有内容时,光标从input的顶端到文字的底部

#解决

padding  去替换  line-height

.content {
  box-sizing: border-box;
  height: 88px;
  .content-input {
    display: block;//块元素
    box-sizing: border-box;//怪异盒模型
    width: 100%;
    font-size: 28px;
    //line-height: 88px;
    padding: 30px 0;
  }
}

02、ios上下滑动页面卡顿,页面缺失

#问题描述

  在ios端,上下滑动页面时,如果页面高度超出了一屏,就会出现明显的卡顿,页面有部分内容显示不全的情况,例如下图,右图是正常页面,边是ios上下滑动后,卡顿导致如左图下面部分丢失。

#产生原因

  微信浏览器的内核,Android上面是使用自带的WebKit内核,iOS里面由于苹果的原因,使用了自带的Safari内核,Safari对于overflow-scrolling用了原生控件来实现。对于有-webkit-overflow-scrolling的网页,会创建一个UIScrollView,提供子layer给渲染模块使用。

#解决

在需要滑动的位置加上如下css代码:overflow:scroll;
-webkit-overflow-scrolling:touch;

#存在问题

1、在滑动界面之中使用的position:fixed 无法固定下来,会随着界面进行一起滚动

  解决方法:将使用的position:fixed(头部导航)写在滑动部位外部,在使用绝对定位进行布局,以此解决问题

2、vue中使用v-if导致的界面初始化之后无法滑动

  解决方法:将v-if改成v-show进行展示,解决界面进入之后第一次不能滑动的问题

#扩展

  -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果.auto: 使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止。touch: 使用具有回弹效果的滚动, 当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果。继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文

03、input输入框在iOS中获取到焦点之后界面上移无法回落问题

#问题描述

  输入内容,软键盘弹出,页面内容整体上移,但是键盘收起,页面内容不下滑

#产生原因

  固定定位的元素 在元素内 input 框聚焦的时候 弹出的软键盘占位 失去焦点的时候软键盘消失 但是还是占位的 导致input框不能再次输入 。

#解决

<input      class="content-input"
      placeholder="请输入姓名"
      v-model="peopleList.name"
      @blur.prevent="changeBlur()"
    />
changeBlur(){
  let u = navigator.userAgent, app = navigator.appVersion;
  let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);  if(isIOS){
    setTimeout(() => {
      const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
      window.scrollTo(0, Math.max(scrollHeight - 1, 0))
    }, 200)
  }
}

#扩展

  • prevent:     阻止默认事件

  • blur:        失去焦点

  • position:fixed  的元素在ios里,收起键盘的时候会被顶上去,特别是第三方键盘

04、界面点反应慢、延时问题解决方案

#产生原因

  iOS嵌套界面之后,界面点击效果会自动产生一个300毫秒的延时

#解决

1、下载fastclick
  npm i -S fastclick
2、引入
   FastClick.attach(document.body);

#存在问题

  引入fastclick之后,会有一个副作用:input输入框需要连续点击两次或者长按才能获取焦点

|解决

  再引入fastClick的js中加入如下代码即可解决input输入框点击不能获取焦点的问题

FastClick.prototype.focus =  (deviceIsIOS&& targetElement.setSelectionRange &&
    targetElement.type.indexOf('date') !== 0 &&!== 'time' &&
    targetElement.type !== 'month'=

05、new Date()转换时间在iOS中不生效问题

#产生原因

  前端界面使用new Date('2021-3-14 23:59:59').getTime(),iOS不解析。

#解决

  换用其他格式:new Date('2021-3-14T23:59:59').getTime()

06、关于部分拷贝方法在iOS中不生效问题

#解决

  前端有时候需要用到拷贝部分内容到剪切板中,但是在使用时发现,部分网上提供的拷贝方法在Android中正常使用,但是在iOS中无法进行拷贝,经过试验发现一种通用的拷贝方法,如下:

/**

* 将内容拷贝到剪切板中*/function copyContent(message) {

   // text: 要复制的内容, callback: 回调

  var input = document.createElement("input");

  input.value = message;

  document.body.appendChild(input);

  input.select();

  input.setSelectionRange(0, input.value.length);

  document.execCommand('Copy');

  document.body.removeChild(input);

}

07、android弹出的键盘遮挡输入框

#解决

  给input和textarea标签添加focus事件

  先判断是不是安卓手机下的操作,当然,可以不用判断机型,Document 对象属性和方法,setTimeout延时0.5秒,因为调用安卓键盘有一点迟钝,导致如果不延时处理的话,滚动就失效了

changefocus(){
  let u = navigator.userAgent, app = navigator.appVersion;
  let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;  if(isAndroid){
    setTimeout(function() {
      document.activeElement.scrollIntoViewIfNeeded();
      document.activeElement.scrollIntoView();
    }, 500);
  }
},
(0)

相关推荐

  • iPhone手机iOS15系统,键盘白色怎么设置

    iOS15更新以后,很多用户都上手发现其中很多小细节都发生的了改变,其中比较明显的就是手机键盘输入法中每个预选字下面都多了一个白色的框,所以很多用户想要知道iOS15键盘白色怎么设置?那么下面就让小编 ...

  • H5常见问题及解决方案手册

    Vue中文社区 今天 作者 / 成都之声 转自:前端开发博客 前言 作为一个开发了多个 H5 项目的前端工程师,在开发过程中难免会遇到一些兼容性等爬过坑的问题.现在我将这些问题一一汇总一下,并在后面给 ...

  • 电脑常见故障维修及解决方案

    电脑已经成为我们学习.生活和娱乐不可或缺的设备.用久了难免会遇到小故障.今天我们来看看电脑常见的小故障.我们应该如何自己检测和修复它们? 我们仍然需要开始检查计算机硬件来检测故障. 1.CPU 打开机 ...

  • 空气源热泵常见16个问题解决方案

    空气源热泵常见16个问题解决方案

  • 初中数学学习中的最常见的错误及解决方案,看完提分!

    中考数学 助力轻松升学! 一.学习方法方面的问题 1.做几何题时候不会做辅助线 原因:对于几何模型认识不充分 解决方案:每一种基本的几何模型都有定义.性质和判定三方面,要将这三方面知识熟记于心.一般来 ...

  • h5移动端调用支付宝、微信支付的实现

    篇文章主要介绍了h5移动端调用支付宝.微信支付的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 公司项目之前已有支付宝支付, ...

  • 中考数学最常见的错误及解决方案

    一.学习方法方面的问题 1.做几何题时候不会做辅助线 原因:对于几何模型认识不充分 解决方案:每一种基本的几何模型都有定义.性质和判定三方面,要将这三方面知识熟记于心.一般来说应用的过程是:判定是哪种 ...

  • 中考数学解题中的最常见的错误及解决方案

    曾听到这样一则不算是笑话的笑话, 有人问,如何才能在考试中的高分呢? 把题做对就好. 那又如何把题做对呢? 把题不要做错就好. -- 估计会一直这样问下去的,虽然看似是笑话,但也包含着考试得高分的真理 ...

  • 一体化路由搭配面板AP常见的IPTV应用解决方案;AC一体化路由器

    应用介绍 IPTV在越来越多的家庭中普及已经是大势所趋,IPTV组网方案也是越来越完善,不同的模式采用不同的设备和相应的方案去保证IPTV的正常使用.本期文章便教你几招,不同场景和需求下如何让IPTV ...

  • 头颅常见伪影及解决方案--基础知识(1)

    peach 头颅扫描常见问题 头颅MRI扫描: PAST 图像展示 原因:患者脑出血,意识模糊,躁动,图像严重的运动伪影. 解决方案:利用"刀锋技术"序列扫描,明显改善伪影,图像清 ...

  • 常见的错误集合解决方案(二)

    常见的错误集合解决方案(一) 七. 关于在Qt中使用QVTKWidget插件问题 问题描述:将QVTKWidget插件的dll放到Qt下面,但是出现了一个现象,就是Release下面可以生成并运行,但 ...