资讯专栏INFORMATION COLUMN

GreenSock (TweenMax) 动画案例(二)

Michael_Ding / 1498人阅读

摘要:实现效果动画分解灯光闪烁文字出现水流心电图知识点可尽情骚扰欧巴了解基本的知识点写在前面写过第一篇文章后动画案例一再回头看发现代码太多,根本没耐心去看完。操作这里就不再赘述了,在动画案例一中有说到转文件。四段水流都是这种方式来移动。

实现效果

动画分解

1.灯光闪烁
2.文字出现
3.水流
4.心电图

知识点

1.AI(可尽情骚扰UI欧巴)
2.SVG(了解基本的知识点)
3.TweenMax(GreenSock)
4.CSS animation

写在前面

写过第一篇文章后GreenSock (TweenMax) 动画案例(一)再回头看发现代码太多,根本没耐心去看完。所以每一个动画效果这次都尽量分开详细的写出来,看的时候不会太乱。涉及到的知识点和自己遇到的坑也尽量提出来,能够让大家不走弯路。AI操作这里就不再赘述了,在GreenSock (TweenMax) 动画案例(一)中有说到AI转svg文件。这里先抛出一个问题,关于SVG animation运动,也就是路径动画如何实现,以及如何兼容IE,可以看一下解决SVG animation 在IE中不起作用。

1.灯光闪烁

设置初始透明度为0

  var light = $("#lightning");
    function sceneOne() {
       var tl = new TimelineMax();
       //实现闪烁
        tl.to(light, 0.5, {
            opacity: 1,
            //闪电闪三次,这里repeat:2个人认为var master = new TimelineMax({repeat: -1});
            //重复第一次的时候,tl.to(light, 0.5, { opacity: 1,repeat: 2,});里重复两遍,共三遍 
            repeat: 2, //闪电闪三次
        });
        tl.to(light, 0.25, {opacity: 0});//闪烁消失
    
        
    }
    var master = new TimelineMax({repeat: -1});//重复整个场景动画
    master.add(sceneOne(), "scene1");
2.文字出现

文字显示在闪烁之后,所以直接添加到上文的tl.to(light, 0.25, {opacity: 0});//闪烁消失之后就可以了。初始状态透明度为0

   tl.to(text, 2, {opacity: 1});//闪烁完成后显示
   tl.to(text, 1, {opacity: 0});//随即消失

这里有个问题研究了很久,就是透明度0->1->0的过程,使用tl.fromTo()(text, 2, {opacity: 1},{opacity: 0});画面一进入text就显示,没有在三秒后才显示即使CSS设置了opacity:0。只能使用两个to方法实现,希望能得到高手的帮助。

3.水流

水流动画涉及到了CSS animation,水流动的时候涉及到了四条路径,我们先研究一条路径,路径包括两个属性,stroke-dasharray的值:223表示穿过水管的水的长度,1000表示尽量长的一段空白,stroke-dashoffset: 223;在这里表示水一开始的偏移量,animation就不在讲解了, to{stroke-dashoffset: -1000; }动画移动到的终点位置,就是让整个水流向前进了1000,这里的负号涉及到了水流的方向。四段水流都是这种方式来移动。画个图就好设置参数了,画了个惨不忍睹的图来理一下思路。

 #path {
  stroke-dasharray: 223,1000;//路径虚实显示方式
  stroke-dashoffset: 223;  //初始偏移位置
  animation: dash 10s linear  5s  infinite; //执行动画,后面的5s是延迟执行,因为是右侧水管,所以要延迟5s 
} 

@keyframes dash {
  to{
    stroke-dashoffset: -1000; 
  }
}  

兼容其他浏览器代码

svg #path {
    stroke-dasharray: 223, 1000;
    stroke-dashoffset: 223;
    animation: dash 10s linear 5s infinite;
    -moz-animation: dash 10s linear 5s infinite;
    -webkit-animation: dash 10s linear 5s infinite;
}

@keyframes dash {
    to {
        stroke-dashoffset: -1000;
    }
}

@-moz-keyframes dash {
    to {
        stroke-dashoffset: -1000;
    }
}

@-webkit-keyframes dash {
    to {
        stroke-dashoffset: -1000;
    }
}

@-o-keyframes dash {
    to {
        stroke-dashoffset: -1000;
    }
}

其他三个水管也是相同的方法进行设置,都设置完毕效果如下,路径长度可以使用snap.svg-min.js的getTotalLength()方法获取长度,完整代码js部分有详细的获取方式。
完整效果
水流效果基本完成,这个效果没办法在IE里好好运动,是整个代码的鸡肋。接下来就是兼容IE所有版本了。
animateRoute(path, 457, -766, -1);
这里的参数457和-766是开始,结束位置的偏移量。这里为了让他有延迟的效果,起始位置加了234,这个长度是左侧水管流过来的距离,相应的终点位置-1000+234=-766,-1的绝对值越大速度越快,负号代表方向。其他几个水流也是相同的方法,这里涉及到不同水管的流动起始位置,数值需要算一下。
IE效果
这里对svg代码做了小的改动。stroke-width="10"的值改成了6,让动画能流畅显示出来,到此水流的效果基本实现

 var path = document.querySelector("#path");
 animateRoute(path, 457, -766, -1);

/*
* ele  //路径对象
* offset //初始偏移位置
* end    //结束位置
* speed  //速度(正负表示方向)
*/
function animateRoute(ele, offset, end, speed) {
    if (!isIE())return;
    var _offset = offset;
    var offsetMe = function () {
        if (speed < 0) {
            if (offset < end) offset = _offset;
        } else {
            if (offset > end) offset = _offset;
        }
        ele.style.strokeDashoffset = offset;
        offset = offset + speed;
        requestAnimationFrame(offsetMe);
    }
    offsetMe();
}

function isIE() { //ie?
    if (!!window.ActiveXObject || "ActiveXObject" in window)
        return true;
    else
        return false;
}
    var path = document.querySelector("#path");
    var path1 = document.querySelector("#path1");
    var path2 = document.querySelector("#path2");
    var path3 = document.querySelector("#path3");

    animateRoute(path, 457, -766, -1);
    animateRoute(path1, 457, -766, -1);
    animateRoute(path2, -234, 1000, 1);
    animateRoute(path3, -234, 1000, 1);

2017.09.07更新~
未编辑完~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85138.html

相关文章

  • GreenSock (TweenMax) 极简入门指南

    摘要:模块化与插件式的结构保持了核心引擎的轻量,包非常小基本上低于。在代码中表示它会把元素初始化为。回调函数提供了丰富的回调函数来操作动画效果。首先来创建一个的函数触发回调函数,只需要添加下面这句代码就可以了就可以了,非常简单。 最近把GreenSock的一些知识以及一些开发技巧使用gitbook整理了一本在线的电子书,GreenSock电子书可以去看看,下面是一个基本入门的简化版本,更详细...

    hoohack 评论0 收藏0
  • 深入浅出 GreenSock 动画:SVG Logo 动画

    摘要:在上面的代码中设置为,表示以倍的速度来运行这个动画效果。当然在动画效果中,运动曲线是必不可少的,提供了丰富的运动曲线来设置动画的运动效果。整个动画效果就完成了,通过这个简简单单的效果,可以发现使用来编写动画效果是多么的方便简单。 在我网站svgtrick开一个新系列,主要是使用GreenSock来编写和实现动画效果,通过实际的效果来熟悉GreenSock的各个方法和技巧。 关于Gree...

    Bowman_han 评论0 收藏0
  • 学习小结 | Vue+TweenMax做一个温度计

    摘要:原作者效果内容是一个温度显示仪器,上方一个当前温度显示,下方还有一个温度刻线。原教程使用了布局,给整个容器加上了的高度,让在没有内容的时候也能被沾满。设置上部分占高度的,下部分为。温度的数据要从的实例中获取,然后进行一个输出。 前言 所谓站在巨人的肩膀上学习,是因为这个例子是来自于一个来自于国外的每周插件的栏目的教程,所以我很严肃的说清楚这点!这篇文章是自己通过这个例子的学习后,的一些...

    smartlion 评论0 收藏0
  • GSAP - 专业的 Web 动画

    摘要:虽然没有视觉效果,但这就是基本的值动画。有专门的位置可以查询缓动函数。另外,不要期望在不支持的浏览器上做动画。是专业动画库,在大部分情况下,它也具备更好的动画性能。 说到在网页里创建动画,你可能很快会想到jQuery的animate()方法,或者css3的animation和transition。现在,本文将介绍另一个web动画的可选方案,GSAP。 GSAP的全名是GreenSock...

    MASAILA 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<