我有一个名为icons.svg的SVG精灵文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="twitter" viewBox="0 0 512 512">
<path d="..some path data here..."></path>
</symbol>
<symbol id="facebook" viewBox="0 0 512 512">
<path d="..some path data here..."></path>
</symbol>
</svg>
我从网页正文中引用的内容:
<svg>
<use xlink:href="/images/common/icons.svg#twitter"></use>
</svg>
我希望预加载icons.svg以避免闪烁。如何做到这一点?
我尝试在head中添加link rel preload:
<head>
<link rel="preload" href="/images/common/icons.svg" as="image" type="image/svg+xml"/>
</head>
但是它没有起作用。我在Chrome开发者工具中看到icons.svg被加载了两次,并出现以下警告:
资源http://localhost:57143/images/common/icons.svg使用link preload进行预加载,但在窗口加载事件后的几秒钟内未被使用。请确保它具有适当的
as
值,并且是有意进行预加载的。
.
<body>
顶部放置一个display:none
的<img>
,文件会被加载两次。如果像你一样预加载它,它会被加载两次。如果我按照@allcaps的建议预加载它而不带有as
`type`声明,它只会被加载一次 - 但是当第一个图标请求它时,而不是在预加载行所在的位置。@JesúsLópez,你找到解决方案了吗? - Codemonkey