前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >移动端H5 input输入完成后页面底部留白问题

移动端H5 input输入完成后页面底部留白问题

作者头像
w候人兮猗
发布于 2020-07-01 07:37:35
发布于 2020-07-01 07:37:35
89800
代码可运行
举报
运行总次数:0
代码可运行

Contents

说明

最近在用vue写几个H5页面在微信上展示,遇到一个在弹窗上input输入完成之后点击键盘的完成,页面底部留出一片空白的问题

出现原因分析
  • 当键盘抬起时,window.scrollY会从0变到键盘的高度,所以解决办法就是当input失去焦点的时候,将window.scrollY重新设置为0
解决
  • 给所有的input``textarea组件设置获取焦点和设置焦点事件,失去焦点的时候将“window.scrollY`设置为0
  • 因为的是vue所以结合vue来写代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <input class="m-input" :value="value" @input="$emit('input', $event.target.value)" @focus="inputFocus()" @focusout="inputFocusOut">
</template>

<script>
  export default {
    name: "MInput",
    props:['value'],
    data(){
      return{
        timer:null
      }
    },
    methods:{
      inputFocus(){
        if(this.timer){
          clearTimeout(this.timer)
        }
      },
      inputFocusOut(){
        this.timer = setTimeout(() => {
          window.scrollTo(0,0)
        },10)
      }
    },
    destroyed(){
      if(this.timer){
        clearTimeout(this.timer)
      }
    }
  }
</script>
  • 获取焦点事件,判断定时器是否存在如果存在的话清除掉(上一个input设置的定时器)
  • 失去焦点事件,将window.scrollY设置为0,并且给一个10的定时器,减少页面失去焦点的突兀感(为了顺滑一点点)
  • destroyed vue组件中如果使用了定时器,一定要记得在组件销毁的生命周期里将清时期清除掉,防止全局定时器过多,容易爆栈
补充:解决方案2
  • 在input上分别增加focusblur的方法,基本可以解决键盘回落后留白问题;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
handleFocus(event) {
    let e = event.currentTarget;
    setTimeout(() => {
        e.scrollIntoView({
            block: 'start',
            behavior: 'smooth'
        });
    }, 300);
}
handleblur() {
    let e = event.currentTarget;
    setTimeout(() => {
        e.scrollIntoView({
            block: 'end',
            behavior: 'smooth'
        });
    }, 300);
     window.scrollTo(0, 0);
}
补充:解决方案3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //解决键盘弹出后挡表单的问题
    window.addEventListener('resize', function() {
      if(
        document.activeElement.tagName === 'INPUT' ||
        document.activeElement.tagName === 'TEXTAREA'
      ) {
        window.setTimeout(function() {
          if('scrollIntoView' in document.activeElement) {
            document.activeElement.scrollIntoView();
          } else {
            document.activeElement.scrollIntoViewIfNeeded();
          }
        }, 0);
      }
    });
补充:页面来回弹跳
  • 问题:失焦时的scrollTop=0造成的页面弹跳。本来iOS是做了这方面的优化,在软键盘弹出和收起时页面会smooth的平滑,由于我加了scrollIntoView破坏了原生的优化导致弹跳了
  • 解决:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
handleFocus(event) {
    clearTimeout(this.timer);
}
handleblur() {
    this.timer = setTimeout(() => {
        document.body.scrollTop = 0;
        window.pageXOffset = 0;
        document.documentElement.scrollTop = 0;
    }, 100);
}
最后
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年5月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「Web编程API」- 04
请注意,本文编写于 2088 天前,最后修改于 174 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
8990
「Web编程API」- 04
中高级前端必须注意的40条移动端H5坑位指南 | 网易三年实践
不知不觉在网易已有三年半,占了一半时间都在与移动端打交道,整个阶段都是遇坑填坑的学习过程。移动端开发在前端里像神一样地存在,不是说它多难而是说它坑位实在太多了,怎样填都填不完。Android和iOS各显神通,Android的系统版本和屏幕分辨率多得难以一招兼容,iOS的顽固标准和未知特性多得难以快速掌握。
JowayYoung
2021/02/03
4.4K0
可能这些是你想要的H5软键盘兼容方案
最近一段时间在做 H5 聊天项目,踩过其中一大坑:输入框获取焦点,软键盘弹起,要求输入框吸附(或顶)在输入法框上。需求很明确,看似很简单,其实不然。从实验过一些机型上看,发现主要存在以下问题:
桃翁
2019/06/20
8.2K1
可能这些是你想要的H5软键盘兼容方案
前端成神之路-WebAPIs04
​ BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。
海仔
2020/12/29
1.5K0
移动端那些戳中你痛点的软键盘问题及解决方法
在ios手机中,当页面中包含有输入框时,点击输入框,键盘弹起,会让页面中被fixed的元素失效。所以造成了底部吸底和顶部吸顶的元素错位的问题。下面的视频中就出现了这个问题,吸顶元素被推到可视区之外去了,而吸底元素也被推到了键盘之上。
wade
2021/05/28
9K0
移动端那些戳中你痛点的软键盘问题及解决方法
点击按钮,回到页面顶部的5种写法
2.scrollTop:scrollTop属性表示被隐藏在内容区域上方的像素数。元素未滚动时,scrollTop的值为0,如果元素被垂直滚动了,scrollTop的值大于0,且表示元素上方不可见内容的像素宽度
全栈程序员站长
2022/09/07
2.7K0
收藏 | 移动端H5开发常用技巧总结
在 iOS Safari (其他浏览器和 Android 均不会)上会对那些看起来像是电话号码的数字处理为电话链接,比如:
@超人
2021/03/18
4.3K0
BOM和DOM
  到目前为止,我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法,并没有和浏览器有任何交互。
changxin7
2022/05/06
5510
BOM和DOM
前端之BOM和DOM
BOM和DOM简介 BOM(Browser Object Model)是指浏览器对象模型,它使JavaScript有能力与浏览器进行“对话”。 DOM(Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。 Window对象是客户端JavaScropt最高层对象之一,由于window对象是其他大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:documen
新人小试
2018/04/12
1.7K0
前端之BOM和DOM
移动端H5坑位指南
使用<a>能快速调用移动设备的电话/短信/邮件三大通讯功能,使用<input>能快速调用移动设备的的图库/文件。 这些功能方便了页面与系统的交互,关键在于调用格式一定要准确,否则会被移动端浏览器忽略。
饼干_
2022/08/23
3.5K0
【移动端bug】iOS 下 Input 和 fixed 的问题
最近在项目中碰到了移动端 IOS 下的一些问题,就打算完整总结一下,以便后续碰到相关问题就不用浪费时间了
神仙朱
2021/05/13
4.8K0
【移动端bug】iOS 下 Input 和 fixed 的问题
H5页面前端开发常见的兼容性问题解决方法
问题描述:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入的时候,光标的高度和父盒子的高度一样,看起来很怪异。例如下图,左图是正常所期待的输入框光标,右边是IOS的 input 光标。
越陌度阡
2022/05/06
2.9K0
H5页面前端开发常见的兼容性问题解决方法
手把手带你分解 Vue 倒计时组件
因为我的页面中需要使用到倒计时功能,发现大佬的已经写了个现成的倒计时组件,于是直接就拿过来用了。
@超人
2022/01/10
1.6K0
手把手带你分解 Vue 倒计时组件
【JS】310- 使用 focusout 事件,解决 iOS 键盘收起不归位问题
今天在开发一个移动端的 H5 页面时,遇到了 iOS 上键盘收起时界面无法归位的问题。下面详细描述下问题和症状:
pingan8787
2019/08/09
3.5K0
h5软键盘挡住输入框问题解决(android)
在部分android机型上测试点击靠下的输入框时遇到弹出的软键盘挡住输入框问题,ios可自身弹起(ios自身的调整偶尔也会出问题,例如第三方键盘会遮挡,原因是第三方输入法的tool bar或者键盘也被当做可视区域,这里不做讨论)
mcq
2018/08/17
6.6K0
h5软键盘挡住输入框问题解决(android)
移动端H5页面开发坑点指南
前言 在平时的H5移动端开发时,我们难免会遇到各种各样的坑点,这篇文章就带着大家来看看怎么解决,文章较长,建议收藏方便以后查阅!
Javanx
2019/10/28
3.1K0
【H5】344- 微信 H5 页面兼容性解决方案
当点击输入的时候,光标的高度和父盒子的高度一样。例如下图,左图是正常所期待的输入框光标,右边是ios的input光标。
pingan8787
2019/09/09
2.7K0
【H5】344- 微信 H5 页面兼容性解决方案
移动端 input 键盘落下,页面未落下
页面整体不要设置 height:100%;overflow:hidden; 否则安卓端 点击input,页面不会上顶,也无法滚动,可能会遮挡【兑换】按钮,需要先收起键盘,再点击按钮,影响用户体验~
super.x
2019/11/03
8400
native 嵌套H5弹出虚拟键盘遮挡界面及其input 文本框上提及其置顶显示
      在于你的布局,可以用定位position:fixed;来做处理,因为他相对于页面来说,定位于屏幕一定的位置。
White feathe
2021/12/08
1.1K0
安卓/ios兼容问题及处理(小程序/H5)
问题:然后利用new Date() 转换时间戳时,使用微信开发工具、安卓都没问题,ios中无法展示并报错 “invalid date”。
小唐同学.
2022/03/15
7.8K1
相关推荐
「Web编程API」- 04
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文