【问题标题】:Custom SVG progress bar fill自定义 SVG 进度条填充
【发布时间】:2015-06-13 10:20:46
【问题描述】:

以最简单的形式,我想制作一个像this website 这样的加载页面。

我想使用自定义 SVG 徽标(我在 illustrator 中制作的)并在页面加载时水平填充徽标。

像 SVG 剪辑蒙版进度条(或其他东西)。

请帮帮我!

谢谢,乔恩

【问题讨论】:

    标签: animation svg webkit progress-bar


    【解决方案1】:

    最简单的方法是使用渐变填充。

    <linearGradient id="progress">
       <stop id="stop1" offset="0" stop-color="black"/>
       <stop id="stop2" offset="0" stop-color="grey"/>
    </linearGradient>
    

    您只需将两个&lt;stop&gt; 元素上的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>

    【讨论】:

    • 感觉好像我很接近了...here 不能让它像一个对象一样填充 SVG,而且它也会在距离结束时停止。
    • 它必须是一个路径。因此,对您来说最简单的解决方案是将两个 d 属性连接到一个路径中。 jsfiddle.net/x6m6doop/8
    • 它没有完成的问题只是测试超时循环没有达到“1.0”的问题。如果您只是从代码中调用setProgress(),它应该不会影响您。无论如何,这是一个固定的小提琴:jsfiddle.net/x6m6doop/9
    • 太棒了!我试图将其作为进度条进行测试。我添加了一张高分辨率图片并将其上传到这里...jonparkinson.co.uk/mustard/。页面加载时不会加载。只是在规定的时间吗?感谢您迄今为止的所有帮助,老实说,非常感谢。
    • 我添加的测试超时循环只是为了显示进度条。它持续固定的 3 秒左右。在实际场景中,您将在初始化的每个步骤之后调用 setProgress() 函数。例如,如果你必须加载五张大图,你会在开始时调用setProgress(0),然后在第一张图片之后调用setProgress(0.2),然后在下一张之后调用setProgress(0.4),等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多