SVG动画模式边缘

3

我希望创建一个条纹动画背景,但是由于某种原因无法去除出现在图案边缘的垂直线条。

以下是我的SVG代码:

<svg width="500" height="500">
      <defs>
  <linearGradient id='stripe-gradient' x1='0%' y1='0%' x2='100%' y2='100%'>
             <stop offset='0%'  stop-color='#AAA'></stop>
    <stop offset='24.9%'  stop-color='#AAA'></stop>
             <stop offset='25%' stop-color='#666'></stop>
    <stop offset='49.9%' stop-color='#666'></stop>
    <stop offset='50%' stop-color='#AAA'></stop>
    <stop offset='74.9%' stop-color='#AAA'></stop>
    <stop offset='75%' stop-color='#666'></stop>
    <stop offset='99.9%' stop-color='#666'></stop>
    <stop offset='100%' stop-color='#AAA'></stop>
  </linearGradient>
        <pattern id='stripe-pattern' width='20' height='20' patternUnits='userSpaceOnUse' >
     <rect x='-20' y='0' width='20' height='20' fill='url(#stripe-gradient)' stroke-width='0' stroke='none'>
      <animate attributeName='x' from='-20' to='0' dur='0.5s' repeatCount='indefinite'></animate>
     </rect>
           <rect x='0' y='0' width='20' height='20' fill='url(#stripe-gradient)' stroke-width='0' stroke='none'>
      <animate attributeName='x' from='0' to='20' dur='0.5s' repeatCount='indefinite'></animate>
     </rect>
        </pattern>
        <mask id='stripe-mask'>
          <rect x='0' y='0' width='100%' height='100%' fill='url(#stripe-pattern)' ></rect>
        </mask>      
      </defs>
      <rect class="hbar thing" x="0" y="0" width="200" fill="green" height="200" mask="url(#stripe-mask)"></rect>
    </svg>

1个回答

3

我知道这篇文章有点旧了,但如果您仍然需要解决此问题,我已经通过加倍条纹、删除图案中的一个矩形,然后将最后一个矩形的大小加倍来使其工作。下面是代码:

<svg width="500" height="500">
    <defs>
        <linearGradient id='stripe-gradient' x1='0%' y1='0%' x2='100%' y2='100%'>
            <stop offset='0%'  stop-color='#AAA'></stop>
            <stop offset='12.45%'  stop-color='#AAA'></stop>
            <stop offset='12.5%' stop-color='#666'></stop>
            <stop offset='24.45%' stop-color='#666'></stop>
            <stop offset='25.5%'  stop-color='#AAA'></stop>
            <stop offset='37.45%'  stop-color='#AAA'></stop>
            <stop offset='37.5%' stop-color='#666'></stop>
            <stop offset='49.9%' stop-color='#666'></stop>
            <stop offset='50%' stop-color='#AAA'></stop>
            <stop offset='62.45%' stop-color='#AAA'></stop>
            <stop offset='62.5%' stop-color='#666'></stop>
            <stop offset='74.95%' stop-color='#666'></stop>
            <stop offset='75%' stop-color='#AAA'></stop>
            <stop offset='87.45%' stop-color='#AAA'></stop>
            <stop offset='87.5%' stop-color='#666'></stop>
            <stop offset='100%' stop-color='#666'></stop>
        </linearGradient>
        <pattern id='stripe-pattern' width='20' height='20' patternUnits='userSpaceOnUse' >
            <rect x='-20' y='0' width='40' height='40' fill='url(#stripe-gradient)' stroke-width='0' stroke='none'>
                <animate attributeName='x' from='-20' to='0' dur='0.5s' repeatCount='indefinite'></animate>
            </rect>
        </pattern>
        <mask id='stripe-mask'>
            <rect x='0' y='0' width='100%' height='100%' fill='url(#stripe-pattern)'></rect>
        </mask>      
    </defs>
    <rect x="0" y="0" width="200" fill="green" height="200" mask="url(#stripe-mask)"></rect>
</svg>

我认为竖条纹出现是因为当浏览器计算两个矩形的位置时存在一些小数值问题。因此,解决方案是只使用一个矩形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接