【问题标题】:Animate SVG Line from Left to right Snap.svg从左到右为 SVG 线设置动画 Snap.svg
【发布时间】:2016-08-28 20:07:27
【问题描述】:

我正在尝试创建一条动画线,就好像它是从一个点绘制到另一个点一样。我已经设法在页面上绘制线条图,但不知道如何将其动画化,就好像它正在被绘制一样?

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();

【问题讨论】:

    标签: javascript animation svg snap.svg


    【解决方案1】:

    你快到了,只是缺少两件事。

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

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

    在此之后,您需要使用stoke-dashoffset 将笔划的偏移量设置为0

    lineDraw.animate({
        strokeDashoffset : 0
    },3000, mina.easein)
    

    working fiddle

    【讨论】:

    • 感谢!你能解释一下:lineLength + ' ' + lineLength 的作用吗?
    • 这设置了你想要的行中不同的间距,所以你可以构建一个类似“10 5”(将重复)或更复杂的东西的dasharray线,例如“10 20 30 5 10 20" 指示空格和字符串破折号。
    【解决方案2】:
    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);
    

    希望这个回答对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 2018-09-29
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多