VSCode 这种基于 Web 的文本编辑器中的输入光标是怎么实现的?

2024-05-31 14:46:29 +08:00
 KyL

打开 VSCode 自带的 Developer Tools 检查编辑器的元素,可以发现编辑器界面是由 div 元素组成的,一个 div 元素代表一行文本。当鼠标选择某一行时,这行的 div 会被添加 class ,展示不同的外观。那么点击这行后,一闪一闪的光标是怎么实现的?是靠动画吗?

3093 次点击
所在节点    Web Dev
8 条回复
iOCZS
2024-05-31 14:55:25 +08:00
我觉得是原生特性
KyL
2024-05-31 14:58:14 +08:00
@iOCZS 在 HTML 中似乎只有 input 或者 textarea 元素有输入光标这种特性。如何在 div 元素上实现这种特性呢?
lscho
2024-05-31 14:59:33 +08:00
div 加 contenteditable 就可以输入啊
elviscai
2024-05-31 15:00:19 +08:00
MossFox
2024-05-31 15:04:59 +08:00
指的是光标那个视觉效果的话,闪烁效果是 JS 修改 CSS 控制的,位置是编辑器窗口里的绝对布局控制的,不在文本那一行 div 里面。
kealm
2024-05-31 15:06:11 +08:00
VSCode 的光标是模拟的,所以可以实现各种效果,不是浏览器原生的。
MossFox
2024-05-31 15:06:59 +08:00
闪烁光标可以有多个,这样设计是很合理的,只要计算出位置就可以同时显示一堆。
试试按住鼠标中键在代码里面上下拖一下,看下那一批光标一起显示的效果。浏览器原生的光标做不到这种。
DiamondYuan
2024-05-31 18:15:53 +08:00
vscode 是创建了一个隐藏的 input ,当你点击编辑器的时候,就会 focus 这个 input ,然后用 js 画一个光标出来。

所有的事件会被这个 input 捕获,通过一写计算后,计算出新 input 的位置,然后渲染出来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1045696

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX