javascript - 将 WebFontLoader 与 React Konva 一起使用会导致文本偏移吗?

标签 javascript reactjs webfonts konvajs react-konva

我正在尝试使用 Web 字体和 React Konva Canvas 库在 Canvas 上绘制一些文本数据。我正在使用 WebFontLoader 库加载网络字体。

在字体完全加载之前当然会有短暂的延迟。但是,一旦加载字体,文本就会绘制在错误的位置,并且在重新绘制之前不会自行纠正。

我注意到,此问题仅发生在 centerright 对齐的文本上,而 left 对齐的文本没有此问题.

我还没有找到任何其他帖子讨论这个问题以及如何解决它。创建对组件的引用并在字体加载完成后使用 WebFontLoader 调用 draw()forceUpdate() 不会导致元素重新调整,只会修改其内容确实如此。

我在 CodeSandbox 上创建了一个最小的可重现示例:https://codesandbox.io/s/react-konva-webfonts-6engr

这是一个演示该问题的 GIF。

Demonstration

注意文本相对于线条的位置,该线条具有静态位置。文本首先以错误的字体加载(请注意,在我的完整应用程序中,我具有隐藏 Canvas 的功能,直到加载字体和图像),然后更改为正确的字体,但处于偏移位置,并且不会自行纠正,直到文本框已修改。

我希望看到 WebFontLoader 的替代方案(以 Konva 可以理解的方式加载字体),或者强制 Konva Canvas 重新绘制自身的代码。

最佳答案

Konva.Text 需要在加载字体时重新计算字符位置。但它不会在加载时自动执行此操作。目前还没有API可以通过某种方法强制手动重新计算。

但是您可以通过更改文本属性(例如 textfontFamily)来强制重新计算内部状态。

实现此目的的方法之一就是回退到默认字体,直到原始字体未加载:

<Text
  text={textData}
  fontFamily={loaded ? 'Roboto' : 'Arial'}
  align="right"
/>

演示:https://codesandbox.io/s/react-konva-webfonts-kswgl

关于javascript - 将 WebFontLoader 与 React Konva 一起使用会导致文本偏移吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733346/

相关文章:

javascript - 如何计算 MongoDB 中的实例数

javascript - 在 ReactJS 中更新数组中对象的最佳方法是什么?

reactjs - React Redux 组件不更新

reactjs - 使用 create-react-app 创建 react 应用需要很长时间并且不成功

reactjs - redux-react-route v4/v5 push() 在 thunk Action 中不起作用

c# - WebBrowser 控件中的 Google 字体仅在外部为 "helped"时显示

css - Myriad Pro 终于可以用作网络字体了吗? (它现在被苹果用作网络字体)

javascript - 是否可以仅使用 JavaScript 而无需使用 HTML 将动态链接插入到电子邮件中? (使用Google脚本发送电子邮件)

javascript - 在动态创建的对象上加载 jquery 行为

css - 有什么方法可以修复 fonts.com @font-face 声明吗?