首页 程序笔记 IOS页面滚动时输入框光标错位不跟随

IOS页面滚动时输入框光标错位不跟随

最近在做一个前端项目时碰到IOS页面滚动时输入框光标错位不跟随这个问题,网上也查阅了很多解决方法。

目前看到比较多出现这种情况的原因是IOS对fixed定位不友好导致。

但是我不使用fixed定位也能重现出这个问题。

我出现输入框光标错位不跟随的情况是这样的:

body高度设为100%,设置一个div高度为100% overflow:auto,然后在这个div里的input在滚动的时候就会出现光标错位不跟随的问题。

也就是说,没有使用body的自然滚动,而是用一个高度100%的容器做滚动就会出现这个问题。

这里就不讨论fixed定位导致光标错位的解决方法了。

如果不是fixed定位导致光标错位的可以继续往下看。

有人说可以在滚动的时候重绘input,方法是给input改变某个不可见样式触发重绘。我实测了一下,效果很不理想。表现形式是滚动的时候,光标一卡一卡地追赶滚动着的输入框。

大致实现代码是这样的

var node = document.activeElement; //当前focus的dom元素
if (node) {
    if (node.nodeName == "TEXTAREA" || node.nodeName == 'INPUT') { //如果是input或textarea
        if (node.style.textShadow === '') {
            node.style.textShadow = 'rgba(0,0,0,0) 0 0 0'; //改变某个不可见样式,触发dom重绘
        } else {
            node.style.textShadow = '';
        }
    }
}

还有说法是样式加上-webkit-overflow-scrolling: touch !important;

实测无效。

咨询了一些比较有经验的前端,给我的方案是监听touchmove事件,当用户用手指上下滑动的时候让输入框失去焦点。这里注意一定是touchmove而不是scroll事件,因为假如监听scroll事件,当用户点击输入框呼出键盘时会触发scroll事件,这样又立刻失去焦点会导致用户无法呼出键盘。

大致实现代码是这样的

var obj = document.getElementById("ele");//滚动容器的id
obj.addEventListener("touchmove", showMsg);
function showMsg(ev) {
    document.activeElement.blur();
}

如果大家有什么完美的解决方法请分享一些,谢谢了。

1

站心网

最近在做一个前端项目时碰到IOS页面滚动时输入框光标错位不跟随这个问题,网上也查阅了很多解决方法。目前..

为您推荐

js 刷新当前页面

本文为大家介绍三种js 刷新当前页面的方法:reload() 方法;replace() 方法;页面自动刷新;方法1:reload() 方法reload()方法用于刷新当前文档。reload() 方法类似于你浏览器上的刷新页面按钮。location.reload();方法..

JavaScript 页面跳转、页面重定向

JavaScript 实现页面跳转重定向可以使用以下两种方法:window.location.replace("url")类似 HTTP 重定向将地址替换成新 url,该方法通过指定 URL 替换当前缓存在历史里(客户端)的项目,因此当使用 replace 方法之..

常用的javascript网页数字滚动插件

在网页开发中,数字滚动效果广泛用于展示统计数据、计数器、动画化的数字效果等。以下是几款常用的 JavaScript 数字滚动插件:1. CountUp.js简介: CountUp.js 是一个轻量级的数字滚动插件,提供平滑的数字滚动动画效..

js使用IntersectionObserver实现锚点在当前页面视口时导读高亮

在 JavaScript 中可以通过监听页面滚动事件,检查每个锚点的位置,并根据当前滚动位置高亮相应的导航项,从而实现页面内锚点链接的导读高亮效果。交叉观察器 API(Intersection Observer API)提供了一种异步检测目..

js使用scroll事件实现锚点滚动到页面顶部时导航高亮

在 JavaScript 中,可以通过监听页面滚动事件,并判断页面顶部与各个锚点的距离来实现导航高亮效果。当某个锚点的内容块滚动到页面顶部时,自动高亮相应的导航项。以下是实现方式:1. HTML 结构假设我们有多个内容区..

Response.Redirect目标页面无法取到Session值

今天开发做一个登陆界面,登陆成功后通过Response.Redirect重定向到登陆后的目标页面。 目标页面做了登陆验证,如果Session中用户信息不存在,则需要重新登陆。结果发现登陆成功后,将用户信息保存到了Session中,..

.NET Core MVC页面输出中文被编码了

如果在使用 .NET Core MVC 时发现页面上的中文字符被编码了,可能是由于的网页编码与的实际编码不匹配所致。可以尝试以下解决方法:在Program.cs文件中注册HtmlEncoder.Create服务:using System.Text.Encodings.Web..

.NET Core不重新编译立即更新页面

在 .NET Core 中,你可以使用一种称为 "Razor Pages" 或 "Razor Views" 的技术来实现页面的热重载,即不需要重新编译应用程序就能立即更新页面。这通常用于开发环境中,以提高开发人员的生产力。以下是一些方法来实..

禁止输入框显示历史记录

如何禁止输入框显示历史记录?在对应的input中加上autocomplete="off"属性即可。在某些场景,比如点击输入框选择日期时需要禁止输入框显示历史记录,否则会有问题,比如下图所示:..

.NET Core Web网站设置默认页index.html

.NET Core Web网站设置默认页index.html。原来IIS可以设置默认静态页面index.html,index.htm等,项目切换到.NET Core后,发现原来一些地址无法打开了,因为这些地址都是到某个文件夹,没有打全index.html。解决办法..

通过css设置a标签锚点页面顶部padding距离

通过#hash值可以跳转到页面锚点位置,这样可以方便用户浏览页面内容。但是滚动到锚点元素位置时,他会紧贴着页面上方顶部。如果网站有固定在顶部的header导航,那么锚点内容会被header导航遮挡。尝试了一些解决方法..

vue跳转页面的方法

1 router-link跳转<!--直接跳转--><router-linkto='/testDemo'><button>点击跳转2</button></router-link><!--带参数跳转--><router-link:to="{path:'testDemo',query:{setid:123456}}"><button>点..

css页面内容不够高footer始终位于页面底部

当页面内容很少的时候,footer会在页面中间就很难看,所以希望通过css实现当页面内容不够高时,footer始终位于页面底部。修改前是这样的,假设内容很少,footer就在屏幕中间通过Flex实现方法,直接上代码:<html><bo..

ios safari页面底部有黑色区域

在 iOS Safari 中出现页面底部的黑色区域通常是因为网页内容没有正确适应视窗大小,导致视窗扩展到了屏幕之外,从而露出了黑色背景。这通常是由于 viewport 设置不正确、CSS 样式问题或 JavaScript 错误引起的。以下..

C#的控制台程序中如何设置命令行窗体的字体颜色,窗口宽度和高度,光标行数

摘要在C#的控制台程序中,经常需要通过代码设置控制台(命令行)窗口的字体颜色,窗口宽度和高度,光标的函数等属性,获取获取控制台支持的背景色,前景色等,下面将给出一些示例代码和运行结果。设置窗口宽度和高度..

页面引导库driver.js官网和用法

driver.js 是一个用于网页引导和用户界面导览的JavaScript库。它可以在网页上创建交互式的引导,帮助用户了解页面的不同功能、元素或者工作流程。driver.js官网:https://driverjs.com/以下是 driver.js 的介绍和用..

js实现关闭页面时提示保存表单

在Web应用程序中,当用户尝试关闭页面时,你可以通过监听 beforeunload 事件来提示用户保存表单数据。这可以防止用户意外关闭页面或离开页面而丢失未保存的数据。以下是一个简单的示例:window.addEventListener('be..

layui输入框input只能输入数字和小数点

对layui的input框进行数字类型输入限制,避免不必要的乱码传输1.只允许输入数字(整数:小数点不能输入)<input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" >2.允许输入小数(两位小数)<input ty..

Chrome Web页面性能分析指标

这些是Chrome 性能分析工具用到的指标:FP(First Paint)FP 是从页面开始加载到任何部分的首次视观呈现的时间。这并不意味着页面的有用内容已经被加载,只是说明了一些内容(如背景颜色、图片或非白色画布)开始出现..

离开页面时100%的发送HTTP请求

当浏览器内多页面发生跳转时,无法保证当前页面进程内的请求能够顺利完成,大多数情况下,这些请求会被浏览器 cancled,此时请求还未到达后端服务器。这些请求的可靠性可能取决于以下几点:网络连接速度、应用程序性..

发表回复

返回顶部