javascript - 防止 Chrome 强制滚动光标进入 View

标签 javascript html css google-chrome

我们正在开发一个文本编辑器(基于文本区域),它将“ Canvas ”向右移动以在左侧显示菜单。几乎是标准的幻灯片显示菜单。

菜单是一个文档列表,当你点击一个文档时,textarea 会被选中的文档文本填充,光标通过 selectionRange/Range 设置到最后保存的位置。

这里有点奇怪:文本区域的一部分不在屏幕的右侧,如果光标放在那里(或什至靠近那里),Chrome 会将 Canvas div 滚动到左侧,尽管position:relative。

有什么办法可以避免这种情况吗?

HTML:

<body>
<div id="wrapper">
    <div id="canvas>
        <textarea>
    </div>
</div>
</body>

CSS:

#wrapper {
 position: absolute;
 left: 300px; /* set via js, to show the menu */
 right: 0;
 overflow: hidden;
}

#canvas {
 position: relative;
 width: 1440px; /* viewport width set via js */
}

textarea {
 width: 100%; /* this properly relates to the fixed width canvas parent */
}      

最佳答案

OP 在这里:这似乎是无法避免的。问题是,如果光标位置在 inner-editor Shadow DOM 元素的溢出部分,因此不可见,Chrome 将移动 inner-editor(= 文本区域内容),直到光标位于文本区域可见的任何部分。

Afaik,因为这是影子 DOM 的一部分,如果不将默认文本区域替换为您自己的 Web 组件,则很难更改此行为。

在我们的例子中,这个问题被部分地掩盖了,因为有问题的 textarea 内容包含一个长长的空白字符变化,这些字符没有被换行但也不可见。

我们应用的解决方案是滚动处理程序,它在浏览器四处移动后立即将所有内容返回到其预期位置。

关于javascript - 防止 Chrome 强制滚动光标进入 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817742/

相关文章:

Javascript Node.js 完全覆盖文件

javascript - 客户端 javascript 可以创建一个太大而无法放入内存的文件下载吗?

javascript - 获取 HTML 标签值并分配给 PHP 变量

html - Internet Explorer 11 中流体 flexbox 容器内的元素出现 "overflow: auto"问题

html - IE11 上的粘性页脚

c# - .NET C# - 在页面验证后调用 javascript 方法?

java - 最佳仪表板架构

javascript - 悬停时打开下拉菜单,而不是单击 shopify

javascript - <form> 导致我的 JavaScript 代码出现问题

javascript - iFrame 适用于 Chrome 但不适用于 IE/Firefxx