从左到右Snap.svg动画SVG线

时间:2016-05-03 16:50:08

标签: javascript animation svg snap.svg

我正在尝试创建一个动画线,好像它是从一个点绘制到另一个点。我已设法将线条绘制到页面上,但无法确定如何对其进行动画处理,就好像它正在被绘制一样?

https://jsfiddle.net/0sdt33dz/

function svgAnimate (){
var s = Snap('#svg');
var linePath = "M-3,148.6c0,0,43.9,7,49.4-17.2c3.5-15.3-9.4-19.7-17.3-13.8c-6,4.4-10,19,11.3,25.4 c24.9,7.5,70.7-31.2,91-61.8S233-41.5,286.3,29.2c0,0-60.7,35.5-24.9,87.9c36.2,53,83.5,15.6,83.5,15.6s19.3,19.5,68.4,17.1";
var lineLength = Snap.path.getTotalLength(linePath);
var lineDraw = s.path(linePath);
lineDraw.attr({
    fill:'none',
    stroke:'#009FE3',
    'stroke-width' :6,
    'stroke-linecap' :'round',
    'stroke-linejoin' :'round',
    'stroke-miterlimit' :10
});
lineDraw.animate({
    stroke : '#fff'
},3000, mina.easein)
console.log(lineLength);
}
svgAnimate();

2 个答案:

答案 0 :(得分:3)

你几乎就在那里,只是错过了两件事。

首先,您需要将stroke-dasharray设置为'<length> <length>',这将创建一条“虚线”线,其间隙/填充等于整行的长度

lineDraw.attr({
    fill:'none',
    stroke:'#009FE3',
    'stroke-dasharray': lineLength + ' ' + lineLength,
    'stroke-dashoffset': lineLength,
    'stroke-width' :6,
    ...

在此之后,您需要使用0

将笔画的偏移设置为stoke-dashoffset
lineDraw.animate({
    strokeDashoffset : 0
},3000, mina.easein)

working fiddle

答案 1 :(得分:1)

var s = Snap("#myLine");

//Line parameters (x1, y1, x2, y2)
var line = s.line(30, 45, 30, 45);
line.attr({
    stroke: "#000",
    strokeWidth: 2
});

//Old x2 values is 30 and now it is increasing to 70 with 1 second duration
line.animate({x2: 70}, 1000);

我希望这个答案可以帮到你!