如何在canvas元素中使用html内容

2023-12-14

任何人都可以告诉我如何将我的 html 内容放在画布上。如果我们能做到这一点,这些元素的属性和事件是否有效,并且我还在该画布上绘制了动画。


From MDN 上的这篇文章:

您不能只将 HTML 绘制到画布中。相反,您需要使用 包含要渲染的内容的 SVG 图像。绘制 HTML 内容,您将使用包含 HTML 的元素,然后 将该 SVG 图像绘制到画布中。

建议您按照以下步骤操作:

这里唯一真正棘手的事情——这可能是 夸大其辞——正在为您的图像创建 SVG。所有你需要做的 创建一个包含 SVG XML 的字符串并构造一个 Blob 与以下部分。

  1. Blob 的 MIME 媒体类型应为“image/svg+xml”。
  2. 元素。
  3. 在里面,元素。
  4. (格式良好的)HTML 本身嵌套在 .

通过使用如上所述的对象 URL,我们可以内联 HTML 而不必从外部源加载它。你可以,的 当然,如果您愿意,可以使用外部源,只要来源是 与原始文档相同。

提供了以下示例(您可以在罗伯特·奥卡拉汉的博客):

DEMO

const ctx = document.getElementById("canvas").getContext("2d");
const data = `
<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>
  <foreignObject width='100%' height='100%'>
    <div xmlns='http://www.w3.org/1999/xhtml' style='font-size:40px'>
      <em>I</em> like <span style='color:white; text-shadow:0 0 2px blue;'>CANVAS</span>
    </div>
  </foreignObject>
</svg>
`;
const img = new Image();
const svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
const url = URL.createObjectURL(svg);
img.onload = function() {
  ctx.drawImage(img, 0, 0);
  URL.revokeObjectURL(url);
};
img.src = url;
<canvas id="canvas" style="border:2px solid black;" width="200" height="200"></canvas>

此示例导致此 HTML 呈现到画布,如下所示:

HTML to canvas snapshot

这些元素的属性和事件是否有效?

不,绘制到画布上的所有内容都会被遗忘为被动像素 - 它们只是变成图像。

您将需要提供自己提供的自定义逻辑,以便处理诸如点击、对象、事件等之类的事情。该逻辑需要定义区域、对象和其他任何内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在canvas元素中使用html内容 的相关文章

随机推荐

  • navigator.getUserMedia 抛出错误 NotAllowedError:状态无效

    尝试创建一个可以录制屏幕的 chrome 扩展 manifest v 3 流程是 在弹出窗口中显示录制按钮 单击记录按钮会在后台打开一个 html 页面 html 页面向后台发送请求以显示活动选项卡的桌面选择器 用户选择窗口 选项卡并开始录
  • 由于缺少 sqlite3 gem,Rails 4.0rc1 应用程序未运行

    我第一次尝试安装 Rails 4 0 在带有 Ruby 2 0 x64 的 Windows 8 上 然 gem install rails version 4 0 0 rc1 no ri no rdoc 然后我运行 rails new te
  • 列表不可调用绘图

    这是给我错误的代码部分 我试图给绘图一个从 12 到 3 的范围 它是一个对数函数 所以它是 12 到 3 而不是 3 到 12 以防有人问 pp PdfPages BV V pdf plt plot BVcolor Vmag go plt
  • iPhone SDK 上的 PDF 操作

    我一直在阅读Apple的文档 他们推荐使用UIWebView 这一切都很好 直到您想要转到页码并搜索 PDF 是否有任何第三方库 免费或付费 可以执行此操作 至少我需要能够搜索并转到 PDF 中的页码 我查看过 PDFKit 不可用 并且
  • Laravel:让 Eloquent 创建嵌套 SELECT 的正确方法

    我试图雄辩地生成的查询是 SELECT SELECT COUNT comment id FROM comment AS c WHERE c approved true AND c blog fk b blog id AS comment c
  • 如何在 script# 中编写一个函数,以便使用任何对象调用,而不仅仅是定义它的类的实例?

    我正在 script 中编写 javascript 我想写一个看起来像的函数 function myFunc if this value gt 100 return true else return false 可以使用任何具有属性 val
  • Openshift - 我可以使用 Openshift 运行 docker 客户端命令(如 docker Push)吗?

    当您拥有 Docker 主机时 使用 Docker 会很容易 您将 Docker 客户端与 Docker 主机 引擎 连接 那么构建和部署 复杂的 docker 镜像的过程就像是 Jenkins 构建服务器上的这一系列命令 Maven cl
  • c中的for循环括号

    我编写了一个程序来使用 for 循环打印整数值 打印后 程序应该等待一秒钟 之后这些整数将被双空格字符覆盖 换句话说 程序的目的是在等待一秒后删除这些整数 这是程序 include
  • 在单个线性图中绘制多个字典/数据框

    我正在从多个词典中的某个来源收集数据 如下所示 d1 01 01 2018 15 02 01 2018 15 03 01 2018 15 d1 01 01 2018 20 02 01 2018 25 03 01 2018 56 d1 01
  • 在 .NET 中将字符串转换为 System.Color

    我正在尝试在 VB NET 上制作此应用程序 其中用户可以更改应用程序的背景颜色 当应用程序关闭时 颜色应保存到 XML 节省是小菜一碟 但现在真正的困境是如何转换字符串 Color white to a System Color 我已经用
  • addSnapShotListener 会触发所有依赖它的函数吗?

    据我了解 当 FireStore 中的数据发生变化时 AddsnapshotListener 会实时触发 但是 我不确定下面的代码中会触发哪个函数 只有函数C被触发吗 还是所有功能 如果所有函数都运行 函数 A 的参数会发生什么 func
  • Rails 不为生产或临时环境中的资产提供服务

    调试过程中这个问题 我尝试在本地生产模式下运行我的应用程序 但它不提供任何资产 另外 我有一个stagingHeroku 应用程序 与我的生产 Heroku 应用程序分开 中的环境现在也显示没有任何资产的 HTML 为了调试 我 杀死服务器
  • 如何向 symfony 会话添加额外的包

    我想为 symfony 会话添加一个额外的包 我在编译器通道中这样做 public function process ContainerBuilder container bag new AttributeBag my session at
  • 安装 python 时在 $PATH 中找不到可接受的 C 编译器

    我正在尝试在我的共享主机上安装新的 Python 环境 我按照中写的步骤操作这个帖子 mkdir src wget http www python org ftp python 2 7 1 Python 2 7 1 tgz tar zxvf
  • Oracle:加载一个大的 xml 文件?

    现在我有大量我感兴趣的 XML 数据 https blog stackoverflow com 2009 06 stack overflow creative commons data dump 我想将其加载到 Oracle 中来玩 如何将
  • 部分应用的功能[重复]

    这个问题在这里已经有答案了 在学习函数式编程时 部分应用函数的概念经常出现 在 Haskell 中 类似内置函数的东西take被认为是部分应用的 我仍然不清楚部分应用函数的确切含义或其使用 含义 函数本身不能 部分应用 或不 部分应用 这是
  • DjangoForeignKey 中的循环依赖?

    我在 Django 中有两个模型 A b ForeignKey B B a ForeignKey A 我希望这些外键不为空 但是 我无法创建对象 因为在我 save 之前它们没有 PrimaryKey 但如果没有其他对象 PrimaryKe
  • 使用“#”作为分隔符时 Read.table 不起作用?

    我有一个数据文件 符号作为分隔符 我想用read file命令 首先 这是一个大数据文件 我不想更改分隔符 因为 使用数据中已存在的不同分隔符的风险 注意 可以检查 但第 2 点使这变得更加复杂 我希望有更多这些数据文件 符号作为分隔符 所
  • 可扩展方式访问 ConcurrentHashMap 的每个元素一次

    我有 32 个机器线程和 1 个ConcurrentHashMap
  • 如何在canvas元素中使用html内容

    任何人都可以告诉我如何将我的 html 内容放在画布上 如果我们能做到这一点 这些元素的属性和事件是否有效 并且我还在该画布上绘制了动画 From MDN 上的这篇文章 您不能只将 HTML 绘制到画布中 相反 您需要使用 包含要渲染的内容