input“输入框”常见问题及解决方法

2023-10-27

 

1. ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱:

当页input存在于吸顶或者吸底元素中时,用户点击输入框,输入法弹出后,fiexd失效,页面中定位好的元素随屏幕滚动。

针对这个问题,我们一起来看下以下几种方案:

方案一: Web API 接口 :scrollIntoView 的应用,将input输入框显示在可视区域。

1 // 输入框获得焦点时,元素移动到可视区域
2 
3 inputOnFocus(e) {
4    setTimeout(function(){
5        e.target.scrollIntoView(true);
6        // true:元素的顶端将和其所在滚动区的可视区域的顶端对齐; false:底端对齐。
7    },200);  // 延时 == 键盘弹起需要时间
8 }

一行代码,轻松搞定,输入框就乖乖的出现在你眼前了。

不过有点小缺陷:页面过长时,由于fixed失效,输入框依然也会跟着页面滑走。

这时,我们需要一个固定的输入框......

方案二:在输入框获得焦点时,将页面滑动到最底部,避免fixed导致的页面乱飞,并且保证input在最底部。

 1 var timer;
 2 // 输入框获得焦点时,将元素设置为position:static,设置timer
 3 inputOnFocus(e) {
 4    e.target.style.className = 'input input-static';
 5    timer = setInterval(
 6        function() {
 7            document.body.scrollTop = document.body.scrollHeight
 8        }, 100)
 9 };
10 // 输入框失去焦点时,将元素设置为 position:fixed,清除timer
11 inputOnbulr(e) {
12    e.target.parentNode.className = 'input input-fixed';
13    clearInterval(timer)
14 };

当获得焦点弹出虚拟键盘后,input输入框会一直紧贴键盘顶部。如果,你的页面弹出输入法后不需要滑动查看其他内容,那么你对这种方案应该很中意。

But,可能你做的是一个类似聊天的页面,需要在回复时,查看历史消息,那么,请你继续往下看

方案三:将页面进行拆分: 页面(main) = 内容(sectionA) + 输入框(sectionB)+ 其他(sectionOther)

 
  1. 原理 : main.height = window.screen.height ;

  2. sectionA 绝对定位,进行内部滚动 overflow-y:scroll ;

  3. sectionB 可保证在页面最底部。

  4. .main { position: relative; height: 100%; }

  5. .sectionA { box-sizing: border-box; padding-bottom: 60px; height: 100%; overflow-y: scroll; -webkit-overflow-scrolling: touch //为了使滚动流畅,sectionA 添加属性 }

  6. .sectionB { position: absolute; height: 60px; overflow: hidden; left: 0; right: 0; bottom: 0; } 

纯css3打造,可以滚动,可以固定位置,基本满足大部分布局需要。

2. IOS 中单行输入框输入内容长被遮盖,不能显示全部,且不能左右滑动。

这个是IOS的一个bug,可以考虑用 textarea 替换 input,设置一行的高,进行上下滚动查看。(其他方案可以参看下面 第 6 点)

3. 获得焦点时,光标消失或错位:

 -webkit-user-select:none 导致 input 框在 iOS 中无法输入,光标不出现,设置如下

user-select: text;
-webkit-user-select: text;

利用scrollIntoView 使当前元素出现到指定位置,避免光标错位,设置如下:

e.target.scrollIntoView(true);  
e.target.scrollIntoViewIfNeeded();

4. 进入页面如何自动获取焦点,弹出软键盘?

  • 添加 autofocus 属性 支持自动获得焦点

  • 触发 focus() 事件

5.随文字输入,输入框宽度自适应。

 onkeyPress(e) {
   const testLength = e.target.value.length;
   e.target.style.width = `${testLength*8+10}px`
 }

这种方案基本满足自动获取效果。

testLength * 8 英文字符,testLength * 16中文字符, +10为后边光标预留位置。 这种方案显然不适用于对精确度有很高要求的需求。

6. 介绍一个属性:contenteditable,模拟输入时动态获取宽高

(1)div设置contentditable=true 可以将此元素变成可输入状态。

<div  class="inputContent"  contenteditable="true" ></div>

(2)想要变成input输入框,利用css模拟输入框的样式

 1 .inputContent{
 2   color: #444;
 3   border: #999 solid 1px;
 4   border-radius: 3px;
 5   padding: 5px 10px;
 6   box-sizing: border-box;
 7   min-width: 50px;
 8   max-width: 300px;
 9   background: #ffffff;
10 }

这里配合min-width,max-width 效果更真实。

(3)点击div可以弹出软键盘,但是无法输入内容,需要设置属性,如下

.inputContent{
    user-select:text;
    -webkit-user-select:text;
}

这样就完成一个可以根据获取输入内容来动态来调节宽高。

(这里是一个gif图)

还可以利用js模拟placeholder等,这里就不展开了

7.其他问题及解决

  • 输入框获得焦点可弹出软键盘,却没有光标闪烁,也无法正常输入。

    -webkit-user-select:none 导致的,可以这样解决

    *:not(input,textarea) {
       -webkit-touch-callout: none;
       -webkit-user-select: none;
    }
  • input 自定义样式

// 使用伪类
input::-webkit-input-placeholder,
input::-moz-placeholder,
input::-ms-input-placeholder {
 ...style
 text-align: center;
}

8. 补丁:近期移动端开发中遇到这样一个问题:ios下 输入框获取焦点后,页面正题网上顶(这没毛病), 尴尬的是失去焦点后页面不回弹了,顶部上移了,底部留有一截灰色区域,需要手动随意触摸一个地方。才会回弹。

  问题1:测试说交互、体验不好;

  问题2:假如页面有ui框架的弹窗,在页面没有回弹的情况下,发现弹层里面的按钮无法点击

解决方法:监听软键盘弹起、关闭事件,在进行对应的操作

mounted () {// 软键盘关闭事件   可在全局的地方  vue的话比如App.vue 文件里添加以下代码
    document.body.addEventListener('focusout', () => {
      // 回到原点  若觉得一瞬间回到底部不够炫酷,那自己可以自定义缓慢回弹效果, 可用css 、贝塞尔曲线、js的 requestAnimationFrame  等等 方法 实现体验性更好的回弹效果
      window.scrollTo({ top: 0, left: 0, behavior: 'smooth' })
    })
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

input“输入框”常见问题及解决方法 的相关文章

随机推荐

  • css文字超出隐藏显示...

    单行 overflow hidden white space nowrap text overflow ellipsis 多行 display webkit box webkit box orient vertical webkit lin
  • Windows10开启Hyper-v并安装Linux CentOS虚拟机

    Windows10开启Hyper v虚拟机配置静态网络 1 Windows10 开启Hyper v 右键单击 Windows 按钮并选择 应用和功能 选择相关设置下右侧的 程序和功能 选择 打开或关闭 Windows 功能 选择 Hyper
  • Element 标签页样式修改

    deep el tabs nav wrap after height 1px deep el tabs item height 50px font size 16px font family PingFang SC font weight
  • Java编程实现Softmax函数功能

    Java编程实现Softmax函数功能 Softmax函数是一种常用的数学函数 广泛应用于机器学习和深度学习领域 尤其在分类问题中起到重要作用 本文将介绍如何使用Java编程实现Softmax函数 并提供相应的源代码 首先 我们来了解一下S
  • centos7启动docker: dial tcp 104.18.123.25:443: i/o timeout.

    在centos7上安装好了docker之后 测试docker是否安装成功 使用官方给出的sudo docker run hello world 解决 再运行一遍命令即可
  • 自定义 scrollview 标头部分的滑动速度慢(scrollview 子控件滑动速度不一致)

    scrollview 子控件滑动速度不一致 先来个布局图 向上滑动时 图片向上划出的速度较下面的蓝色view慢 现在我们先来看布局文件
  • 基于tensorflow的手势检测和手势识别分类

    项目目的 在手机端实现用户手势的检测并且识别用户所做的手势 遇到的问题 首先在手部检测的解决办法中 我尝试过用opencv进行手部识别 但存在的问题是背景对手的识别的影响太大 如果采用颜色进行手和背景的区分的话 又会受到光照等影响 总体而言
  • 【机器学习实战】决策树 python代码实现

    typora copy images to upload 第三章 决策树 3 1决策树的构造 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失不敏感 可以处理不相关的特征数据 缺点 可能会产生过度匹配的问题 适用数据类型 数据型和标称
  • 弱网的概念以及弱网测试

    什么是弱网测试 在当今移动互联网盛行的时代 网络的形态除了有线连接 还有2G 3G Edge 4G Wifi等多种手机网络连接方式 不同的协议 不同的制式 不同的速率 使移动应用运行的场景更加丰富 从测试角度来说 需要额外关注的场景就远不止
  • SpringBoot日志配置【详解】

    文章目录 前言 1 为什么使用Logback 2 Logback使用 2 1 添加依赖 2 2 默认配置 3 logback spring xml详解 3 1 configuration元素 3 2 logger 元素 3 3 root 元
  • 购物商城---页面缓存oscached

    流程图 web xml
  • VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏

    转载 http blog csdn net easysec article details 8833457 转载 http www vckbase com module articleContent php id 567 title 用VS
  • 离线安装Docker镜像

    部分线上服务器无法连接公网 或者服务器下载镜像比较慢 遇到这种情况要怎么解决 我们可以在联网的本机或服务器上 将已经下载好的镜像导出 然后导入到没有网络的服务器上 通过Docker加载 例如 这里有一个镜像grafana loki 2 2
  • 订单系统开发

    一 订单系统基本框架的搭建 1 创建maven工程 pom xml文件内容如下
  • WSA with Magisk Root安装配置教程(2023.5)

    前言 最近正式走上了安卓逆向的道路 刚开始尝试了各种模拟器 雷电 夜神 及其海外版 并且安装配置了多次magisk 倒不是说这些模拟器的体验有多差 主要还是不能与 Windows Hype V 共存导致无法使用 WSL 这点让我无法接受 s
  • markdown语法最全汇总

    一 markdown简介 注 如果对markdown有一定了解 可以略过此处 第一章主要对markdown基础知识做个补充 摘自菜鸟教程此处原文档 博客原地址 欢迎收藏访问 1 1 markdown背景 1 markdown是一种轻量级标记
  • 一枚芯片的实际成本是多少?(1)

    芯片的硬件成本构成 芯片的成本包括芯片的硬件成本和芯片的设计成本 芯片硬件成本包括晶片成本 掩膜成本 测试成本 封装成本四部分 像ARM阵营的IC设计公司要支付给ARM设计研发费以及每一片芯片的版税 但笔者这里主要描述自主CPU和Intel
  • shiny教程一 -- shiny入门

    Shiny是一个R软件包 可轻松从R直接构建交互式Web应用程序 本课程将使您立即开始构建Shiny应用程序 如果还未安装Shiny软件包 打开R会话窗 确保联网状态 然后运行 install packages shiny Shiny软件包
  • vue 中click.stop的用法

    click stop 阻止点击事件继续传播 场景 在table中使用 点击当前行 当前行被勾选 但是点击当前行中按钮或点击事件时 使用此方法 则在触发当前点击事件后 阻止行的选中事件 使用 html
  • input“输入框”常见问题及解决方法

    1 ios中 输入框获得焦点时 页面输入框被遮盖 定位的元素位置错乱 当页input存在于吸顶或者吸底元素中时 用户点击输入框 输入法弹出后 fiexd失效 页面中定位好的元素随屏幕滚动 针对这个问题 我们一起来看下以下几种方案 方案一 W