我使用最新版本的Snap.svg在SVG中绘制path
动画:
var s = Snap('#svg');
var getPath = s.path('M15 15L115 115');
var pathLength = getPath.getTotalLength();
getPath.attr({
stroke: '#000',
strokeWidth: 5,
strokeDasharray: pathLength + ' ' + pathLength,
strokeDashoffset: pathLength,
strokeLinecap: 'round'
}).animate({
strokeDashoffset: 0
}, 1500);
虽然这很好(正如你可以看到here),但我想把它变成虚线,一个接一个地点动画。
我已经使用圆圈(您可以看到here)构建了一个快速原型,以说明外观和风格,但从技术上讲,我希望它基于自定义path
。< / p>
基本上我正在寻找一种为虚线(复杂)路径制作动画的方法;所以带有属性的路径就像路径上的圆圈一样精细。
答案 0 :(得分:2)
因为stroke-dasharray可以是一个值数组,你可以将stroke-dashoffset保留为0并更新stroke-dasharray直到你到达整行。 这样的事情虽然这个例子并不是很平滑和优化。
var s = Snap('#svg');
var getPath = s.path('M15 15L115 115');
var pathLength = getPath.getTotalLength();
var perc = 0;
var dotLength = 5;
var gapLength = 4;
getPath.attr({
stroke: '#000',
strokeWidth: 1,
strokeDasharray: 0,
strokeDashoffset: 0,
strokeLinecap: 'round'
});
function updateLine(){
perc +=1;
if(perc>100){
perc = 100;
}
var visibleLength = pathLength*perc/100;
var drawnLength = 0;
var cssValue = '';
while(drawnLength < visibleLength){
drawnLength += dotLength;
if(drawnLength < visibleLength){
cssValue += dotLength+ ' ';
drawnLength += gapLength;
if(drawnLength < visibleLength){
cssValue += gapLength+ ' ';
}
}else{
cssValue += (visibleLength + dotLength - drawnLength)+ ' ';
}
}
cssValue += pathLength;
if(perc<100){
setTimeout(updateLine, 100);
}
getPath.attr({
strokeDasharray: cssValue
});
}
updateLine();
如果你想要的差距是&#34;跳过&#34;在动画上,你应该从pathLength
中减去它们答案 1 :(得分:1)