深入浅出 GreenSock 动画:SVG Logo 动画

送外卖
• 阅读 6277

在我网站svgtrick开一个新系列,主要是使用GreenSock来编写和实现动画效果,通过实际的效果来熟悉GreenSock的各个方法和技巧。

关于GreenSock的基础知识,可以看看我整理的GreenSock简明教程

这个效果也是在codepen上看到的,拿来分析下实现思路,顺便熟悉下GreenSock的一些API的使用方法。

先来看看要实现的效果:

深入浅出 GreenSock 动画:SVG Logo 动画

这个效果中这个图形是使用SVG来实现的,代码有点多,详细代码就不贴了,贴个大概的的结构:

<div class="container">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" class="undefined">
    ......
    </svg>
</div>

加上一点点样式:

body{
  background-color:#fff;
  overflow:hidden;
}
body, html {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
}

.container, svg{
  width:100%;
  height:100%;
}

svg{
  visibility:hidden;
}

在样式中,先把SVG的visibility的属性设置为hidden,这样就可以等GreenSock初始化设置完后,才显示SVG,在体验上会更好一点。

先来分析下效果:

1、首先是顺时针旋转

2、然后是缩小

3、最后放大

不停的循环这个动画效果。

先来初始化一些设置,从效果可以看出,logo是垂直水平居中。这里使用GreenSock来实现这个定位的:

var container = document.querySelector('.container');
var triangle = document.querySelector('.undefined');

TweenMax.set(container, {
  position:'absolute',
  top:'50%',
  left:'50%',
  xPercent:-50,
  yPercent:-50
})
TweenMax.set(triangle, {
  scale:0.25
})
TweenMax.set('svg', {
  visibility:'visible'
})

首先是把SVG和DIV节点存储在定义好的变量中。然后使用TweenMax的set方法来把logo定好位置,在SVG初始的状态中,它本身进行了一个缩放,缩放到原来的0.25倍。初始化完后,把SVG的visibility设置为visible,显示SVG。

接下来就是来编写动画效果:

var tl = new TimelineMax({repeat:-1, repeatDelay:1});
tl.timeScale(6);
tl.to(triangle, 8, {
  rotation:'+=360',
  ease:Power2.easeIn
})
.to(triangle, 3, {scale: 0.2, ease:Power2.easeOut})
.to(triangle, 3, {scale: 0.25, ease:Power2.easeIn})

首先声明一个TimelineMax的实例,从效果可以看出,这个动画效果是无限循环的,所以设置它的repeat属性的值为-1,并且循环的延迟时间为1秒即repeatDelay:1

先来设置动画运行的速度,通过timeScale方法来设置。

timeScale方法是用来设置或读取时间轴的回放速率,比如0.5为一半速率,1为正常速度,2为2倍速度。在上面的代码中设置为6,表示以6倍的速度来运行这个动画效果。

设置好动画播放速度后,先来实现图形的旋转效果,通过TimelineMax.to方法来实现。

在GreenSock中可以通过rotation方法来实现旋转效果,动画效果是旋转360度,即可以通过rotation:'+=360'来实现这个效果。当然在动画效果中,运动曲线是必不可少的,GreenSock提供了丰富的运动曲线来设置动画的运动效果。在代码中简单的使用了最基础的运动曲线easeIn,效果跟CSS3中的easeIn差不多。更丰富的曲线可以去这个地址看看。

旋转之后,是在初始大小的状态下进行缩小,通过scale这个属性来实现。这里缩小的值是o.2,缩小之后,恢复的初始状态即scale:0.25。

整个动画效果就完成了,通过这个简简单单的效果,可以发现使用GreenSock来编写动画效果是多么的方便简单。

demo地址

总结下,这个效果的使用到几个重点的方法:

1、repeat : int:循环次数。设置为-1为无限循环。

2、repeatDelay : Number:循环延迟的时间。

3、timeScale:Number[读写] 用来设置或读取时间轴的回放速率,比如0.5为一半速率,1为正常速度,2为2倍速度。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
4年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Stella981 Stella981
4年前
AndroidStudio封装SDK的那些事
<divclass"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,2.55,5z"id"raphael
Wesley13 Wesley13
4年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
4年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
送外卖
送外卖
Lv1
爱与被爱同时发生才是值得炫耀的事。
文章
3
粉丝
0
获赞
0