How to animate path morphs using snap.svg

后端 未结 2 2007
挽巷
挽巷 2020-12-09 05:13

I have been searching for a good example on how to animate a svg path morph. I know how to do do pretty complex ones using SMIL, but snap.svg is new and shiny, and everyone

相关标签:
2条回答
  • 2020-12-09 05:53

    If you're looking for something only for SVG Morph, you may not need the entire SnapSVG library, you can use KUTE.js. Really, take a look at this (Best viewed in Chrome and Firefox):

    <div style="width: 220px">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600">
        <path id="rectangle" fill="indigo" d="M38.01,5.653h526.531c17.905,0,32.422,14.516,32.422,32.422v526.531
                            c0,17.905-14.517,32.422-32.422,32.422H38.01c-17.906,0-32.422-14.517-32.422-32.422V38.075C5.588,20.169,20.104,5.653,38.01,5.653z"></path>
        <path id="star" style="visibility:hidden" d="M301.113,12.011l99.25,179.996l201.864,38.778L461.706,380.808
                            l25.508,203.958l-186.101-87.287L115.01,584.766l25.507-203.958L0,230.785l201.86-38.778L301.113,12.011"></path>
    
      </svg>
    </div>
    
    <script id="core" src="https://cdn.jsdelivr.net/kute.js/1.5.5/kute.min.js"></script>
    <script id="svg" src="https://cdn.jsdelivr.net/kute.js/1.5.5/kute-svg.min.js"></script>
    
    <script>
    var tween = KUTE.to('#rectangle', { path: '#star' }, {duration: 1500, yoyo: true, repeat: 1, morphIndex: 127}).start();
    
    document.addEventListener('click', function(){
        !tween.playing && tween.start();
    }, false);
    </script>

    It's free and really easy to use.

    0 讨论(0)
  • 2020-12-09 06:04

    Not quite sure if you mean you just want the current animation in Snap or something different. Just to give an example of how one would typically do some animation...

    s = Snap(400, 620);
    
    var path = s.path("M94.2,265.7L82,203.4c43.3-15.6,83.8-29.2,137.1-20.2c61.5-27.6,126.1-56.9,202.6 46.1c18.7,18.9,21.5,39.8,12.2,62.3C322.7,231.9,208.2,247.6,94.2,265.7z");
    
    path.animate({ d: "M179.4,83.5l62.4-11.8c15.3,43.4-76,102.6-22.6,111.5c61.5-27.6,126.1-56.9,202.6-46.1c18.7,18.9,21.5,39.8,12.2,62.3C250.6,296.7,52.4,259.2,179.4,83.5z" }, 1000, mina.bounce);
    

    jsfiddle

    Edit: There needs to be the same amount of points on the path to morph from/to.

    0 讨论(0)
提交回复
热议问题