可编辑DIV与移动端软键盘兼容性问题汇总
此文复现的所有兼容性问题均为以下情况:
1. 腾讯X5内核
2. 全屏webview
问题如下:
1. IOS12 中软键盘弹出导致页面顶部截断,并且无法恢复。
解决方法:添加交互事件,调用本地方法,在键盘收起后执行页面回滚操作。
bridgeClass.jsEventHook.keyboardWillShow = function () {
// 添加flag 是因为 有多个空时,切换输入框也会调用WillHide
switchFlag = true;
};
bridgeClass.jsEventHook.keyboardWillHide = function() {
switchFlag = false;
setTimeout(() => {
if (!switchFlag) {
document.body.scrollTop = ;
document.body.style.height = document.body.clientHeight;
}
}, );
};
2. 页面中有多个可编辑DIV时,点击IOS系统中软键盘左上方的上下箭头会导致页面布局错乱
解决方法: 利用样式 user-modify 或者contentEditable,在整体页面中通时只存在一个可编辑DIV,从而变向禁止IOS软键盘的上下箭头。
3. 获取可编辑DIV内容时,除获取到所需文本之外,空格可能会被解析为UTF-8, 出现乱码的情况。
解决方法: 使用encodeURI碱性转码,使用decodeURI或者decodeURIComponent获取标签的innerHTML内容并进行解码。(前提需要将多余的标签过滤掉)
4. IOS使用中文输入法输入英文时会出现多余的空格,并且出现乱码的情况。
解决方法: 同问题三的解决方法
5. 可编辑DIV在IOS中无法通过调用focus使其获取光标
在IOS系统中,无法通过代码主动触发focus事件,只能通过用户手动触发
解决方法: 是哦那个window.navigator.userAgent 匹配 Safari 做相应的交互处理
6. 使用伪元素模拟placeholder效果
.eidt-area__main:empty:before{
content: attr(ph);
color:#999;
font-size: .427rem;
}
.eidt-area__main:focus:before{
content: none;
}
7.可编辑div中防止单个单词过长,或单行英文过长导致布局错乱
word-wrap: wrap;
word-break: keep-all;
8.在可编辑div中禁止右键弹出菜单活长按弹出菜单
为可编辑div添加属性 oncontextmenu="window.event.returnValue=false"
<div id="write-box" class="write-box" :class="{'write-box-over': wordCount > wordMax}" spellcheck="false" autocapitalize="off" autocomplete="off" autocorrect="off" ph="请在此处输入你的答案" contenteditable="plaintext-only" onpaste="return false;" oncopy="return false;" oncut="return false" @input="checkInput" oncontextmenu="window.event.returnValue=false"></div>
9. 在文章中嵌入可编辑div导致编辑的文字和文章的文字水平未居中
在外层盒子中使用 vertical-align做垂直对齐设置
10. 需求: 在可编辑div输入框光标后面显示词数
使用 :after 伪元素,为可编辑DIV添加属性count
.write-box::after{
content: attr(count);
color: #999;
font-size: 0.427rem;
line-height: 0.4rem;
}
11. 可编辑DIV光标定位至最后
let oDiv = document.querySelector('#write-box');
oDiv .focus();
var range = window.getSelection();//创建range
range.selectAllChildren(oDiv);//range 选择obj下所有子内容
range.collapseToEnd();//光标移至最后
可编辑DIV与移动端软键盘兼容性问题汇总的更多相关文章
- Ionic3学习笔记(九)关于 Android 端软键盘弹出后界面被压缩的问题
本文为原创文章,转载请标明出处 今天做了一个如下图所示的页面. iOS 端毫无 bug,Android 端却出现了问题.当软键盘弹出后,Android 端的 tabs 移到了软键盘的上面,再仔细一看, ...
- web中ios移动端软键盘收起后,页面内容留白不下滑
微信里面打开web页面,在ios软键盘收起时,页面键盘位置的内容留白,如下图 这个问题纠结了很久,然后请教了老大(威哥),看到页面老大给出的方案就是代码改变滚动条的位置. 这里就监听键盘收起的事件,来 ...
- vue-自定义pc端软键盘
<template> <div> <el-input v-model="money" type="textarea" placeh ...
- IOS微信端软键盘收起后界面按钮失效问题
问题描述: 1.在vue里封装了一个confirm的弹窗(即如下一个弹窗) 2.发现在IOS微信客户端中打开后,当需要在表单中输入内容的时候,很自然的点击了键盘右上角的[完成]按钮 3.啊~~~,惊人 ...
- 总结几个移动端H5软键盘的大坑
1.部分机型软键盘弹起挡住原来的视图 解决方法:可以通过监听移动端软键盘弹起 Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内.参数如下. true,表示 ...
- form表单提交和ajax表单提交,关于移动端如何通过软键盘上的【搜索】和【前进】进行提交操作
[文章来源]由于自己对于form研究甚少,所以一直用的都是AJAX进行提交,这次后台提出要用form提交,顺便深入研究一下:之前在做表单的时候,发现input可以通过设置不同的type属性,调用不同的 ...
- JS移动端如何监听软键盘回车事件
移动端经常项目中会有搜索之类的功能,一般实现的是按搜索按钮进行搜索,如果要像PC端一样实现按回车键进行搜索该怎么实现呢? 方法很简单,就是在搜索框的input外面套一个form标签 注意点:form ...
- 【移动端web】软键盘兼容问题
软键盘收放事件 这周几天遇到了好几个关于web移动端兼容性的问题.并花了很长时间去研究如何处理这几种兼容问题. 这次我们来说说关于移动端软键盘的js处理吧. 一般情况下,前端是无法监控软键盘到底是弹出 ...
- Android EditText弹出软键盘实现页面标题头不动,软键盘弹出在编辑框下面
为了实现EditText编辑的时候弹出软键盘标题头不动,底部编辑框,上移在这总结: RelativeLayout在弹出软键盘的时候先寻找android:layout_alignParentBottom ...
随机推荐
- Confluence 6 修改默认空间标识图片
空间标识图片在边栏上的站点目录(Sites Directory)中作为图标进行显示.默认的空间标识图片将会应用到所有的空间中,如果你没有自定义的空间标识被定义的话,请查看 Configure the ...
- 【es】创建索引和映射
参考:http://www.cnblogs.com/sheeva/p/4837881.html 创建索引: curl -XPUT 'http://localhost:9200/some_index' ...
- 《剑指offer》栈的插入弹出序列
本题来自<剑指offer> 栈的插入弹出序列 题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2, ...
- Nginx详解五:Nginx基础篇之HTTP请求
http请求 如今的http请求已经不是每一次请求都进行一次三次握手,可以在请求与相应之后,客户端和服务端不断的发送FIN和ACK包来保持连接的状态,即:长连接 HTTP请求建立在一次TCP连接基础上 ...
- 性能测试四十七:jmeter性能监控工具ServerAgent
在liunx压力机进行压测的时候,可以在widows下开一个jmeter,只进行监控用,不产生压力,监控效果和dstat差不多 jmeter安装客户端插件 把工具放到服务端任意目录并解压,我这里放到了 ...
- ftp的自动部署以及添加虚拟账户的脚本
#!/bin/bash #本脚本为自动化安装vsftp,使用虚拟用户认证登录ftp上传下载文件 echo =============================================== ...
- C++ Primer 笔记——智能指针
1.新的标准库提供了两种智能指针类型,shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指的对象.标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shar ...
- 饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统
先决条件:VM虚拟机的安装.contes系统的镜像文件 1:创建新的虚拟机 2:下一步,稍后安装操作系统 3:选择对应的系统 4:选择对应的路径 至此虚拟机已经创建完成(相当于买了一台新电脑) 5:编 ...
- STL用法大全
1. 概述 泛型编程思想最早缘于A.Stepanov提出的部分算法可独立于数据结构的论断.20世纪90年代初A.Stepanov和Meng Lee根据泛型编程的理论用C++共同编写了STL.但直 ...
- php归档格式:phar文件详解(创建、使用、解包还原提取)
转载一篇,突然遇到一个冷知识,phar的东东,貌似和jar.war是一种鬼. 重点使用一下下面这个东东,就能解包出来东东了. $phar = new Phar('lib/yunke.phar', 0) ...