【发布时间】:2015-06-13 10:20:46
【问题描述】:
以最简单的形式,我想制作一个像this website 这样的加载页面。
我想使用自定义 SVG 徽标(我在 illustrator 中制作的)并在页面加载时水平填充徽标。
像 SVG 剪辑蒙版进度条(或其他东西)。
请帮帮我!
谢谢,乔恩
【问题讨论】:
标签: animation svg webkit progress-bar
以最简单的形式,我想制作一个像this website 这样的加载页面。
我想使用自定义 SVG 徽标(我在 illustrator 中制作的)并在页面加载时水平填充徽标。
像 SVG 剪辑蒙版进度条(或其他东西)。
请帮帮我!
谢谢,乔恩
【问题讨论】:
标签: animation svg webkit progress-bar
最简单的方法是使用渐变填充。
<linearGradient id="progress">
<stop id="stop1" offset="0" stop-color="black"/>
<stop id="stop2" offset="0" stop-color="grey"/>
</linearGradient>
您只需将两个<stop> 元素上的offset 的值更改为您想要的百分比- 0->1 或“0%”->“100%”。例如:
一个示例函数可能是:
function setProgress(amt)
{
amt = (amt < 0) ? 0 : (amt > 1) ? 1 : amt;
document.getElementById("stop1").setAttribute("offset", amt);
document.getElementById("stop2").setAttribute("offset", amt);
}
这种方法适用于任何 SVG 元素,无论是文本(如下面的演示),还是由路径组成的复杂徽标。
function setProgress(amt)
{
amt = (amt < 0) ? 0 : (amt > 1) ? 1 : amt;
document.getElementById("stop1").setAttribute("offset", amt);
document.getElementById("stop2").setAttribute("offset", amt);
}
// Simple test of setProgress().
// We step up from 0 to 1 using timeouts
val = 0;
doTimeout();
function doTimeout() {
setProgress(val);
val += 0.01;
if (val <= 1) {
setTimeout(doTimeout, 30);
}
}
text {
font: 'Times Roman', serif;
font-size: 125px;
fill: url(#progress);
}
<svg width="650" height="150">
<defs>
<linearGradient id="progress">
<stop id="stop1" offset="0" stop-color="black"/>
<stop id="stop2" offset="0" stop-color="grey"/>
</linearGradient>
</defs>
<text x="20" y="120">TILL JANZ</text>
</svg>
【讨论】:
d 属性连接到一个路径中。 jsfiddle.net/x6m6doop/8
setProgress(),它应该不会影响您。无论如何,这是一个固定的小提琴:jsfiddle.net/x6m6doop/9
setProgress() 函数。例如,如果你必须加载五张大图,你会在开始时调用setProgress(0),然后在第一张图片之后调用setProgress(0.2),然后在下一张之后调用setProgress(0.4),等等。