gpt4 book ai didi

svg - 如何将 SVG 元素设置为我的页面的收藏夹图标?

转载 作者:行者123 更新时间:2023-12-04 10:04:21 25 4
gpt4 key购买 nike

我的页面上有一个 SVG 元素。我想用它作为页面的收藏夹。我如何在 JavaScript 中做到这一点?

最佳答案

这样做是非常令人费解的。你可以看到我的解决方案here :方法如下所述(通过 ID 或其他方式获取 HTML 元素,留给读者作为练习)。

在 HTML 中

  • 确保您的 SVG 元素包含属性 xmlns="http://www.w3.org/2000/svg" ,因为您需要将元素的源作为其自己的文件,并且独立 SVG 文件需要 XMLNS 声明。 (另请注意,这意味着您的 SVG 将需要是自包含的,并且不能使用类似 <use> 的内容引用其父文档中的元素。)
  • 或者,将元素包裹在 <div> 中或 <span> ,您可以使用它来获取 <svg> 的内容元素使用 .innerHTML . (在当前的 HTML 标准中,SVG 元素上不存在 innerHTMLouterHTML 属性。)
  • 包括 <link rel="icon">在您页面的 <head> .

  • 在 JavaScript 中
  • 通过获取 innerHTML 获取要设置为收藏夹图标的 SVG 元素的来源包装它的 HTML 元素的属性,或通过调用 new XMLSerializer().serializeToString()在 SVG 元素上。
  • 通过在字符串前面添加 "data:image/svg+xml," 来为此元素创建一个 DataURL 作为文档。到源头。 (如果大多数浏览器都支持用于收藏夹图标的 SVG,我们就到此为止了,但由于在撰写本文时,它们不支持,我们必须深入了解。)
  • 创建 <img>元素,您将通过它路由图像,为 load 添加一个事件监听器。一旦控制返回到事件循环,将绘制图像的事件(因为符合规范的浏览器不会让您同步读取图像 - see this crbug),并将您的 SVG 源的 DataURL 设置为其 src属性。 (这一步和第 8 步之间的步骤可以同步发生,也可以作为监听器回调的一部分;它们只需要在您绘制图像之前发生。)
  • 决定您要将网站图标呈现为何种分辨率 - 我的示例将使用 64x64,以兼容高 DPI(Retina 和 Super Retina)显示器。
  • 创建一个 <canvas>元素(之前称为 canvasElement )并设置其尺寸(通过设置 canvasElement.width = 64canvasElement.height = 64 )。
  • 使用 canvasElement.getContext('2d') 为 Canvas 创建绘图上下文(之前称为 ctx )。
  • 如果您要重新使用预先创建的 Canvas ,请设置 ctx.globalCompositeOperation = "copy" ,或者用 ctx.clearRect(0, 0, 64, 64) 清除它.
  • load 之后的执行序列中的某处您添加到 <img> 的监听器您在第 3 步中创建的元素,使用 ctx.drawImage(svgImg, 0, 0, 64, 64) 将图像绘制到 Canvas 上(其中 svgImg 是您将 <img> 设置为 SVG DataURL 的 src 元素)。
  • 使用 canvasElement.toDataURL() 从 Canvas 创建一个 PNG DataURL ,并将其设置为 href <link rel="icon"> 的属性HTML 中的元素。
  • 关于svg - 如何将 SVG 元素设置为我的页面的收藏夹图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20232982/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com