我正在使用text
类型的HTML输入。我正在使用Selection API以编程方式手动获取和设置输入的光标。
当光标设置为这样的特定位置时,输入的滚动不会自动聚焦在光标的位置上。要强制滚动聚焦,必须手动计算输入的scrollLeft
并设置光标位置的位置。这就是出现问题的地方。
光标的位置由输入文本字符串中的字符索引设置。如果字符串中有40个字符,则将光标设置为位置40会将其设置为字符串的末尾。不幸的是,scrollLeft
是使用每个字符的宽度设置的,以像素为单位。由于所有角色的宽度都不相同,因此存在问题。这意味着,要手动将输入元素的焦点设置到光标的位置,您必须计算字符串开头和光标位置索引之间每个字符的宽度。
我想到的最简单的方法是创建第二个输入,用于分别测量字符串中每个字符的宽度。由于无法自动获取任何给定字符的宽度,因此第二个输入的scrollWidth
将等于该单个字符的宽度。对于我的用例,游标一次只能改变一个索引的位置。这意味着我可以一次增加或减少scrollLeft
每个角色的宽度。
因为这将是非常复杂的,我想知道是否有人遇到过一些简单的事情来实现我的目标。类似的东西:
inputEL.scrollLeft = 'auto';
注意:手动将光标设置在输入中,然后在该输入上调用focus()
不起作用。但这样的事情是理想的。