SVG动画模式边缘

时间:2017-03-04 11:18:54

标签: svg jquery-animate

我想创建条纹动画背景但由于某种原因无法删除出现在图案边缘的垂直线。

这是我的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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

我知道这个帖子有点陈旧但是如果你仍然需要解决这个问题我已经通过加倍条纹,移除模式中的一个rects然后加倍最后一个rect的大小来使它工作,cf ,以下代码:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

我认为只要浏览器计算出两个rects的位置,垂直条纹就会出现一些小的数字问题。因此,解决方案是只使用一个rect。