【问题标题】:Canvas with text supporting native ctrl+f in browser带有文本的画布在浏览器中支持原生 ctrl+f
【发布时间】:2015-09-30 12:47:08
【问题描述】:

如果您在 Canvas 中编写文本,是否有可能以某种方式使“查找”(ctrl+f)工作?

我查看了https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_text 的基本示例,在 chrome 中搜索“hello world”时,画布文本未突出显示。

有没有办法做到这一点?

如果没有,是否有人见过仅使用 DOM 实现“框线”图表(如 UML)? (此后将支持原生查找文本)

【问题讨论】:

  • Html5 Canvas 在其画布上绘制文本 -- 您看到的文本是以字母形状排列的一组不可访问的像素,因此 Ctrl-f 将找不到文本.如果您想要可搜索的文本,您可以使用 CSS 将 html div 放置在画布上并将其内容设置为您想要的文本。然后 Ctrl-f 会找到它。您可以在 div 上设置pointer-events: none,这样它就不会捕获您打算用于画布的事件。
  • 一种疯狂(但不推荐)的解决方法是将包含所有文本的元素放在屏幕外。当 Ctrl-f 在该元素中找到某些内容时,您可以获取选定的文本并计算您在画布上绘制相同选定文本的位置。然后,您可以将画布上的选定文本重绘为蓝底白字,以表明它已“找到”。完全不推荐这种疯狂的解决方法,但它可能会奏效。
  • 与此相关:RGraph (www.rgraph.net) 的下一个 beta 版本将支持使用 DOM 文本而不是画布文本。一个示例 URL 是 rgraph.net/demos/bar-basic.html(目前不是 - 当我发布下一个测试版时)。
  • @markE 在答案中输入您的 cmets,我会接受吗? :)
  • @markE 酷!我做了一些阅读并意识到 svg 更适合我的“框线”图需求。但是 svgs 对多行溢出文本的处理很糟糕,所以我最终使用 SVG 来绘制线条和绝对定位的 div 框(正如你所建议的 :))。我将 div 设置为 contentEditable,因此当您编写文本时它们会自动调整大小。如果您想尝试,请提供基本演示:docku.firebaseapp.com

标签: html5-canvas


【解决方案1】:

Html5 Canvas 在其画布上绘制文本——您看到的文本是以字母形状排列的一组不可访问的像素,因此 Ctrl-f 将找不到文本。如果您想要可搜索的文本,您可以使用 CSS 将 html div 放置在画布上并将其内容设置为您想要的文本。然后 Ctrl-f 会找到它。您可以在 div 上设置 pointer-events: none,这样它就不会捕获您打算用于画布的事件。

一个疯狂(但不推荐)的解决方法是将包含所有文本的元素放在屏幕外。当 Ctrl-f 在该元素中找到某些内容时,您可以获取选定的文本并计算您在画布上绘制相同选定文本的位置。然后,您可以将画布上的选定文本重绘为蓝底白字,以表明它已“找到”。完全不推荐这种疯狂的解决方法,但它可能会起作用

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多