代码合并svg

2019-06-08  本文已影响0人  临安linan

我们常常会使用svg,但如果引入的svg过多时,将他们整合成一个svg图会是更好的选择,可以减少请求次数以及保证多个图标同时加载出(避免出现svg加载顺序差异造成体验不好)
那么,我们要怎样将svg合并呢?
其实有不止一种办法,可以选择在网上找现成的工具,也可以用代码合并。
如何用代码合并?
先引入两个svg

<?xml version="1.0" encoding="UTF-8"?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</svg>

<?xml version="1.0" encoding="UTF-8"?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</svg>

然后将svg标签改为symbol,并且加上id

<?xml version="1.0" encoding="UTF-8"?>
<symbol  id="icon-pre" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</symbol>

<?xml version="1.0" encoding="UTF-8"?>
<symbol id="icon-next" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</symbol>

接下来,既然是要合并,那就在最外层包裹一个svg标签吧

<svg>
  <?xml version="1.0" encoding="UTF-8"?>
  <symbol  id="icon-pre" width="120px" height="120px" viewBox="0 0 120 120" version="1.1"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  // ...
  </symbol>

  <?xml version="1.0" encoding="UTF-8"?>
  <symbol id="icon-next" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  // ...
  </symbol>
</svg>

完工,接下来,只需要在需要使用的地方通过id引用即可,如下:

<svg>
  <use xlink:href="#icon-pre"></use>
</svg>

做完这些,我们已经可以使用合并后的svg了,但还有一些可以优化的地方

由于svg标签本身是占空间的,所以上面那一个svg也会在页面占据空间,这不是我们所希望的,所以我们要把它隐藏掉

<svg style="display: none" >
// ...
</svg>

此时,我们的svg已经很完备了,但是就是不够优雅,毕竟那么一大堆代码放在html里,我们只要用JS动态创建插入body中就好了。

let svgWrapper = document.createElement('div')
svgWrapper.style.display = "none"
document.body.appendChild(svgWrapper)
svgWrapper.innerHTML = `<svg>
  // ...略略略
</svg>`

以上。

上一篇 下一篇

猜你喜欢

热点阅读