FabricJS 文本框 - 某些字体的光标位置设置不正确

Posted

技术标签:

【中文标题】FabricJS 文本框 - 某些字体的光标位置设置不正确【英文标题】:FabricJS Textbox - The cursor position is not set correctly for certain fonts 【发布时间】:2018-05-07 19:11:16 【问题描述】:

在上图中,光标应该在末尾,但由于某种原因,它位于最后一个字符之前。 这只发生在某些字体上。

我认为这与自定义字体的加载方式无关,这张图片来自http://fabricjs.com/loadfonts。此外,正在使用该库的最新版本。

要重现该问题,您必须执行以下操作:

    将字体系列更改为“Pacifico”。 点击文本框进入编辑模式。 开始输入。

有时,即使是最后一个字符也会超出边界框。 我认为这与 _measureChar() 函数的执行方式有关,但我不确定需要更改什么。

提前致谢!

编辑: 我做了更多的测试,似乎这个问题在 IE 中不存在。 这个问题出现在 Chrome 和 Firefox 中。 在每个浏览器中如何呈现字符也很奇怪:

【问题讨论】:

pacifico 有一些奇怪的字距调整,可能是测量错误 是的,我认为这可能是原因。我还注意到在 IE 中似乎没有出现问题。此外,每个字符的形状似乎在浏览器中并不一致。我更新了我的问题,添加了一张图片来显示这一点。 我认为这个问题可能与github.com/kangax/fabric.js/issues/3588有关 这个问题很久以前就解决了。 1.7 中的大部分文本代码不适用于 2.x 【参考方案1】:

在canvas.requestRenderAll()之前添加以下代码;

fabric.charWidthsCache[this.value] = ;
canvas.getActiveObject()._initDimensions();
canvas.getActiveObject().setCoords();

【讨论】:

我在 onInput() 方法中添加了这段代码,就在调用 requestRenderAll() 之前,但是光标位置仍然没有正确设置。 请添加 jsfiddle 所以我会在那里尝试 jsfiddle.net/f1v3/f12841gc 如果您选择“Times New Roman”,则不会出现此问题。我创建了一个 Textbox 子类,通过包含您指定的代码来修改 onInput() 函数

以上是关于FabricJS 文本框 - 某些字体的光标位置设置不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何从 RichTextBox 中的光标位置选择前一个字符

禁止对文本框内指定字符(部分内容)进行修改

禁止对文本框内指定字符(部分内容)进行修改

使用fabricjs的位图文本

simulink添加文本框

如何在 C# 的富文本框中将文本添加到用户光标的位置?