【问题标题】:Is there a way to sprite raster images within an SVG element?有没有办法在 SVG 元素中显示光栅图像?
【发布时间】:2012-11-16 04:36:29
【问题描述】:

我有以下 SVG 元素,其中包含要显示在网页地图上的标记。标记由引用各种小型 PNG 图像的 <image> 元素组成:

<svg id="OL_105_svgRoot" width="1246" height="373" viewBox="0 0 1246 373">
 <g id="OL_105_root" style="visibility: visible;" transform="">
  <g id="OL_vroot">
   <image id="P115" cx="843" cy="203" r="1" x="827" y="188" width="32" height="32" href="spider.png" ...>
   <image id="P119" cx="453" cy="269" r="1" x="437" y="254" width="32" height="32" href="zoo.png" ...>
   <image id="P123" cx="628" cy="82" r="1" x="612" y="67" width="32" height="32" href="wild.png" ...>
   <image id="P131" cx="10495" cy="69" r="1" x="1034" y="53" width="32" height="32" href="export.png" ...>
...
  </g>
 </g>
</svg>

有什么方法可以用一个大的图像文件替换这些图像,并使用类似于 CSS background-position 属性的东西来指定每个图像的查看窗口?

【问题讨论】:

    标签: javascript css svg


    【解决方案1】:

    &lt;image&gt; 元素包装到内部&lt;svg&gt; 元素中,在&lt;svg&gt; 元素上指定一定的宽度和高度,在&lt;image&gt; 元素上使用xy 指定“background-position”属性可能是一个解决方案:

    <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
      <svg width="17" height="19">
        <image xlink:href="http://s14.postimage.org/f66u116ap/rainbow_Hello_World4.png" width="188" height="19"/>
      </svg>
      <svg width="17" height="19" x="12" y="19">
        <image xlink:href="http://s14.postimage.org/f66u116ap/rainbow_Hello_World4.png" width="188" height="19" x="-17"/>
      </svg>
      <svg width="17" height="19" x="35" y="6">
        <image xlink:href="http://s14.postimage.org/f66u116ap/rainbow_Hello_World4.png" width="188" height="19" x="-34"/>
      </svg>
      <svg width="17" height="19" x="46" y="14">
        <image xlink:href="http://s14.postimage.org/f66u116ap/rainbow_Hello_World4.png" width="188" height="19" x="-51"/>
      </svg>
      <svg width="17" height="19" x="60" y="24">
        <image xlink:href="http://s14.postimage.org/f66u116ap/rainbow_Hello_World4.png" width="188" height="19" x="-68"/>
      </svg>
    </svg>
    

    (见test on Tinkerbin。)

    您也可以使用clip-path 属性,但我想这比上述解决方案更乏味。

    【讨论】:

    • 我无法更改文档结构,因为 &lt;image&gt; 元素是由地图 API 自动生成的。这可以通过改变图像元素的属性来完成吗?
    • 是的,可以使用clip-path 属性来完成,但很抱歉我现在无法详细说明。
    • 非常感谢!这也可以用于精灵动画:jsfiddle.net/syyvp700
    猜你喜欢
    • 2016-02-23
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2014-09-04
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多