在文本字段中输入时,有没有办法触发浏览器默认的“滚动到光标”行为?

Posted

技术标签:

【中文标题】在文本字段中输入时,有没有办法触发浏览器默认的“滚动到光标”行为?【英文标题】:Is there a way to trigger the browsers default "scroll to cursor" behaviour when when typing in a textfield? 【发布时间】:2017-11-08 10:35:59 【问题描述】:

我想触发浏览器的默认行为,当有人开始写并且光标在屏幕上时跳转到光标。

目前,如果我调整光标的大小不在屏幕上,我想在调整大小后再次将滚动条居中光标。

当我调整大小并键入时,滚动条会自动跳到正确的位置。有没有办法使用 vanilla javascript 或 jQuery 触发“跳转到光标”行为?

【问题讨论】:

【参考方案1】:

嗯,试试这样的:

$('.element').keydown(function (event) 
    event.preventDefault();
    $(this).focus();   
);

【讨论】:

问题是,这会触发 keydown,但我想模拟 keydown“滚动到插入符号”的行为。不过谢谢! :) 基本上是的,在 Element 调整大小时,滚动条应该跳转到 contenteditable 中的光标位置 :) 如果我做对了,你想使用: $('item').keydown();或 $('item').focus() 在 $(window).resize() 事件??? 是的,我想触发浏览器“键入时跳转到活动光标”行为:)【参考方案2】:

您可以使用 document.activeElement 选择焦点元素和 scrollIntoView()

$(window).resize(function()
  element = document.activeElement;
  element.scrollIntoView(true);
);
div
  height:200vh;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<input type="text" />

【讨论】:

遗憾的是不能滚动到当前光标位置。不过谢谢你:) 我用一个有效的 sn-p 编辑了我的答案。将输入集中在 sn-p 的最底部并返回页面。 5 秒后,它将聚焦输入。您现在要做的就是编辑代码何时触发。 在 Chrome 中,这会将代码 sn-p 移动到页面顶部,我的意思是,编辑器在屏幕上并且有溢出,在调整编辑器大小时,编辑器的滚动条会滚动光标离开屏幕。当我键入时,它会捕捉到光标。这就是我想要模拟的:) 你有你的情况的例子吗?我不太明白你的意思。 我有一个内容可编辑的编辑器,例如50 像素宽,固定最大高度为 100 像素。现在,如果有溢出,将显示一个滚动条,以便您滚动文本。当我写的时候,浏览器会自动跳转到光标位置,这样用户就可以看到他/她在写什么。如果我将编辑器宽度调整为例如100px,内容现在移动并以新大小重排,但光标现在位于不可见区域。当我键入时,浏览器会再次跳转到它,但我想将光标滚动到我的调整大小功能中的可见区域。 :)

以上是关于在文本字段中输入时,有没有办法触发浏览器默认的“滚动到光标”行为?的主要内容,如果未能解决你的问题,请参考以下文章

使用清除图标清除 IE10 上的文本输入时触发的事件

触发所有移动设备输入文本的数字键盘[重复]

按下回车键时文本字段中的 KeyListener 未触发

在 SwiftUI 中捕获文本字段值而不按返回键 [重复]

页面加载后如何触发对 WebView 中文本输入字段的关注?

如何在文本框中获取Enter键以触发函数而不是第一个/默认按钮