掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

anime.js 实战:实现一个 SVG 形变(morphing)动画

这个实例来看看如何使用anime.js来实现一个形变(morphing)动画。

至于什么是morphing动画,看完下面这个图就知道了。

简而言之,就是不同形状之间能平滑的转换。这个用SVG来做羹适合不过了,因为SVG本身的形状就是有各种不同坐标之间的线段绘制而成的。从形状到另外一个形状的转化就是移动坐标点而已。

说起来貌似挺简单的,其实真正要实现起来还是有点复杂的。今天我们来使用之前多次提到过的anime.js这个js库来实现morphing动画。

关于anime.js的基础知识,可以去看看以前发过的这篇文章

在anime.js中提供了做动画必不可少时间轴的管理功能,可以轻松的控制和管理动画的播放。

具体可以去官网的文档看看,Timeline

下面来看看要实现的效果:

使用anime.js实现起来非常简单,只需要准备两个形状的SVG即可。

观察这个效果,可以发现这个效果主要是形状之间的转化,同时还有颜色的变化。

首先默认显示的F这个字母,结构如下:

<h2>SVG morph in HTML, CSS & JS</h2>
<p>Powered by <a href="http://anime-js.com/" target="_blank">anime-js</a></p>
<svg class="social"
     xmlns="http://www.w3.org/2000/svg"
     width="100"
     height="100"
     viewBox="0 0 100 100">
  <path class="path"
        style="fill:#3b5998;fill-rule:evenodd;stroke:#3b5998;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 41.416254,90 c -0.327378,-7.4702 0.20833,-32.7284 0,-39.901 -5.386902,-0.2083 -4.521603,0.3274 -9.848987,0 0.20833,-5.50595 0.36436,-7.66666 0.126269,-13.32142 4.646472,0.0181 3.439989,-0.009 9.848987,-0.1894 0.09586,-3.7736 0.133082,-3.0791 0.126269,-7.38674 0.18259,-3.73943 -0.486609,-10.54308 4.293149,-14.96288 4.779758,-4.4198 13.606811,-3.64808 22.223356,-3.53554 -0.04417,5.73754 -0.03936,9.37986 0,12.87945 -5.049924,0.46388 -7.309188,-0.33689 -10.85914,1.26269 -1.403378,3.17794 -1.569601,4.80531 -1.262691,11.93242 3.147964,-0.13336 8.201788,-0.1378 12.626907,0 -0.995158,6.00899 -0.948285,7.62376 -1.767767,13.06882 -3.676625,0.088 -5.605721,-0.1488 -11.111678,0 -0.148814,6.756 0.357147,33.0107 0,40.1536 -6.428576,0.1786 -8.174438,-0.03 -14.394674,0 z" />
</svg>

接下来就是使用anime.js来实现形变动画效果。

首先声明一个时间轴:

var socialTimeline = anime.timeline({ autoplay: true, direction: 'alternate', loop: true });

中间的几个参数也非常容易理解,自动循环来回播放效果。

下面就是具体动画效果的编写,显示形状的变化,即从字母F转变为twitter的logo。

代码如下:

socialTimeline
  .add({
    targets: '.path',
    d: {
      value: [
      "m 41.416254,90 c -0.327378,-7.4702 0.20833,-32.7284 0,-39.901 -5.386902,-0.2083 -4.521603,0.3274 -9.848987,0 0.20833,-5.50595 0.36436,-7.66666 0.126269,-13.32142 4.646472,0.0181 3.439989,-0.009 9.848987,-0.1894 0.09586,-3.7736 0.133082,-3.0791 0.126269,-7.38674 0.18259,-3.73943 -0.486609,-10.54308 4.293149,-14.96288 4.779758,-4.4198 13.606811,-3.64808 22.223356,-3.53554 -0.04417,5.73754 -0.03936,9.37986 0,12.87945 -5.049924,0.46388 -7.309188,-0.33689 -10.85914,1.26269 -1.403378,3.17794 -1.569601,4.80531 -1.262691,11.93242 3.147964,-0.13336 8.201788,-0.1378 12.626907,0 -0.995158,6.00899 -0.948285,7.62376 -1.767767,13.06882 -3.676625,0.088 -5.605721,-0.1488 -11.111678,0 -0.148814,6.756 0.357147,33.0107 0,40.1536 -6.428576,0.1786 -8.174438,-0.03 -14.394674,0 z",
      "m 10.44335,90 c 11.073313,0.3952 19.483106,-1.8358 23.901837,-7.1603 -7.9736,-1.4292 -11.832311,-4.1933 -15.078321,-11.0837 3.459698,0.8219 5.795894,0.6358 7.606781,-0.607 -7.19593,-1.719 -12.734543,-6.7971 -13.741664,-15.836 2.766355,1.55307 5.466848,2.66623 7.828682,2.0203 -4.336544,-2.92911 -9.838998,-10.47636 -5.555839,-22.47589 8.400675,11.87052 23.824269,17.67568 33.840111,17.67767 -0.936406,-9.74688 5.88057,-19.46521 15.302849,-19.97853 8.13118,-0.50719 10.57457,4.01944 12.476346,4.82624 3.644547,0.13419 7.393301,-1.74401 10.354063,-3.53553 -1.380842,4.47157 -5.06769,5.62903 -6.313453,8.58629 5.42317,0.41513 5.891376,-1.53111 8.333758,-2.0203 -2.071414,3.75017 -5.393863,5.00034 -7.323606,8.08122 -1.633654,16.12573 -5.16049,27.57123 -14.647212,36.36553 -13.825764,11.3764 -34.755458,17.369 -56.984332,5.14 z"
      ],
      duration: 700,
      delay: 200,
      easing: 'easeInOutQuart'
    },

选中路径元素,然后选中要改变的属性,我们这里是要改变路径的值即d属性,直接写入要变化形状的值就可以了。然后是动画时间,延迟和动画曲线等动画参数的调整,让动画更自然。

后面是改变路径形状的填充和边框颜色,非常简单。

比如改变填充颜色:

 fill: {
      value: ['#3b5998', '#4099ff'],
      duration: 700,
      delay: 200,
      easing: 'easeInOutQuart'
    },

这里颜色的值,是一个数组。在执行的时候,anime.js会自动读取数组里颜色的值,填充到路径中去,从而实现两个形状填充颜色的动画。

demo地址

通过上面一个简简单单的动画,可以发现使用anime.js来做SVG的动画,也非常的方便,主要是轻量级。

原文来自:svgtrick

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 营运车判定查询

    输入车牌号码或车架号,判定是否属于营运车辆。

    输入车牌号码或车架号,判定是否属于营运车辆。

  • 名下车辆数量查询

    根据身份证号码/统一社会信用代码查询名下车辆数量。

    根据身份证号码/统一社会信用代码查询名下车辆数量。

  • 车辆理赔情况查询

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

  • 车辆过户次数查询

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

  • 风险人员分值

    根据姓名和身份证查询风险人员分值。

    根据姓名和身份证查询风险人员分值。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future