是否可以使用 HTML5 Canvas Text API 绘制文本装饰(下划线等)?
我正在使用 HTML5 画布 API 来显示一些字符串 (canvas.fillText),我想知道画布 API 是否可以实现文本装饰(如下划线、删除线等)。不幸的是,我对此一无所获。
我发现的唯一解决方案是使用画布绘图 API 手动进行装饰(我的意思是,显式绘制一条水平线,例如,模仿“下划线”装饰)。
使用画布文本 API 可以实现这一点吗?
I am using the HTML5
canvas API to display some string (canvas.fillText), and I was wondering whether text-decoration (like underline, strikethrough, etc.) was something possible with the canvas API. Unfortunately, I found nothing about this.
The only solution I found was to manually do the decoration using the canvas drawing API (I mean, explicitly drawing a horizontal line, for example, to mimic the 'underline' decoration).
Is this possible using the canvas text API?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
它不适用于内置方法,但这是我根据阅读成功使用的简化函数,“HTML5 Canvas:文本下划线解决方法"。
It won't work with a built-in method, but here is a simplified function I used successfully based on reading, "HTML5 Canvas: Text underline workaround" on the ScriptStock website.
您可以通过使用
measureText
和fillRect
来完成此操作,如下所示:此方法唯一困难的部分是无法使用measureText 获取高度。否则,您可以在绘制 fillRect 时使用它作为 Y 坐标。
您的 Y 位置仅取决于文本的高度以及您希望下划线的距离。
堆栈片段中的演示
You can do this by using
measureText
andfillRect
like so:The only difficult part about this approach is there is no way to obtain the height use measureText. Otherwise, you could use that as your Y coordinate when drawing your fillRect.
Your Y position will only depend on the height of your text and how close you'd like the underline.
Demo in Stack Snippets
要向画布文本添加下划线,只需在与文本相同的 (x,y) 位置添加下划线字符即可。
例如,您想要在 abc 下划线
类似地,对于删除线,您可以使用“-”字符而不是下划线。
To add an underline to your canvas text, simply add underline characters at the same (x,y) position as your text.
e.g. you want to underline abc
Similarly for strike through, you would use the "-" character rather than underline.
我创建了 Mulhoon 代码的替代版本。我还考虑了文本基线。
完整示例
I created an alternative version of Mulhoon's code. I also take into account the text baseline.
Full Example
很遗憾,答案是“不”。 HTML Canvas 上下文的文本方法。
I'm sorry to say that the answer is 'no'. There are no 'text-decoration' or similar styles available in the text methods of the HTML Canvas Context.