单页应用及支持它们的前端框架提供了一个很好的机会,可以为程序设计提供令人惊叹的交互层,本文,我们将了解 vue.js 及如何集成 GASP 动画库来添加令人惊叹的动画效果。
Vue.js 是一个功能强大且易掌握的 JS 框架,在 Vue CLI 的帮助下,我们能够快速构建具有所有最新 Webpack 功能的应用程序,而无需花费时间来配置 webpack,只需安装 Vue CLI,在重大上输入:create <project-name>,您就可以发车了。
GASP是一个JavaScript动画库,它支持快速开发高性能的 Web 动画。GASP 使我们能够轻松轻松快速的将动画串在一起,来创造一个高内聚的流畅动画序列。
在构建新的 Daily Fire 主页时,我为了演示产品如何工作而使用了大量动画,但是通过 GASP的方式(不是 GIF 或视频),我可以为动画添加交互层使它们更具吸引力。如你所见,将 GASP 与 vue相结合是简单且强大的,
让我们看看如何使用 GASP 与 VUE 实现简单的时间轴,我们将在本文使用 .vue 文件,这些文件由 webpack 的 vue-loader加载使用,通过Vue CLI创建的项目将会自动
基础
让我们先编写一些标记,以便了解我们将制作的动画
<template> <div ref="box" class="box"></div> </template> <style> .box { height: 60px; width: 60px; background: red; } </style>
我们将一个红色 box 绘制到DOM中,注意 div 标签上的ref 标记,当我们在引入GASP 后通过该属性可以引用该元素。VUE 通过组件的$refs属性使通过 ref 标记的元素可以使用。
现在引入 GASP
<template> <div ref="box" class="box"></div> </template> <script> import { TimelineLite } from 'gsap' export default { mounted() { const { box } = this.$refs const timeline = new TimelineLite() timeline.to(box, 1, { x: 200, rotation: 90 }) } } </script> <style> /* styles emitted */ </style>
首先,我们从 GASP 中引入TimelineLite,然后,当组件挂载后,我们通过$refs获取到对 box 元素的引用。然后我们初始化 GASP 的时间线实例来播放动画。
Timeline 实例暴露出一个to方法,我们传递三个参数给该方法:
- 参数1:要设置动画效果的元素
- 参数2:动画运行的秒数
- 参数3:描述动画行为的对象
下面链接展示了一小段代码展示的运行效果:
https://codepen.io/smlparry/pen/rZdbEw
很简单,有木有!接下来让我们用 GASP 的 EasePack 赋予这个小动画更多的生命。使用 ease缓动特效是一种简单的方案,它将使你的动画特效不再那么僵硬,更加友好。当然,如果你没有将你的动画放进队列中,你将不能充分利用好 GASP 的时间线,让我们在动画的运行中途将其由红框过渡为绿框。
<template> <div ref="box" class="box"></div> </template> <script> import { TimelineLite, Back } from 'gsap' export default { mounted() { const { box } = this.$refs const timeline = new TimelineLite() timeline.to(box, 1, { x: 200, rotation: 90, ease: Back.easeInOut, // Specify an ease }) timeline.to(box, 0.5, { background: 'green' }, '-=0.5' // Run the animation 0.5s early ) } } </script> <style> /* styles emitted */ </style>
注意第21行的额外参数,在上面的代码中它将告诉 GASP 运行一个相对于前一个动画的动画,使用+=指定完成后的时间,使用-= 指定完成前的时间。
结果在链接中:https://codepen.io/smlparry/pen/mGxYWN
有了这个简单的改动,我们的动画更加生动了!
通过这些原则的基础了解,我们可以开始构建更复杂、更吸引人的动画。正如我们将在下一个例子中所看到的。
在基础上更进一步
让我们创建一个动画(该动画曾在Daily Fire首页中使用 ),这个友好的小泡泡:
让我们从标签标记开始:
<template> <div class="bubble-wrapper"> <div ref="bubble" class="bubble"> <img class="bubble-image" src="/UploadFiles/2021-04-02/slack-white.svg">我们现在有这个一个元素
让我们赋予它一些生命:
<template> <!-- HTML emitted --> </template> <script> import { TimelineLite, Back, Elastic, Expo } from "gsap" export default { mounted() { const { bubble, bubblePulse } = this.$refs const timeline = new TimelineLite() timeline.to(bubble, 0.4, { scale: 0.8, rotation: 16, ease: Back.easeOut.config(1.7), }) timeline.to( bubblePulse, 0.5, { scale: 0.9, opacity: 1, }, '-=0.6' ) this.timeline.to(bubble, 1.2, { scale: 1, rotation: '-=16', ease: Elastic.easeOut.config(2.5, 0.5), }) this.timeline.to( bubblePulse, 1.1, { scale: 3, opacity: 0, ease: Expo.easeOut, }, '-=1.2' ) } } </script> <style> /* CSS Emitted */ </style>虽然一开始看起来很麻烦,但只要花点时间来理解它的实际运行情况,其实它只是一些按顺序排列的 CSS transform属性。这里有几个自定义的 ease 特效,GASP 提供了一个有趣的小工具,你可以根据喜好自由配置:https://greensock.com/ease-visualizer
现在效果如下:
循环
上面的gif动画其实具有欺骗性,gif图片是循环的,但代码不是,让我们看看如何使用 GASP 和 VUE 循环播放动画。GASP 的 TimelineLite提供了一个onComplete属性,通过该属性我们可以分配一个函数,利用该函数我们可以循环动画,另外,我们将通过data使timeline在组件的其余部分也可使用。
<template> <!-- HTML Emitted --> </template> <script> // ... export default { data() { return { timeline: null, } }, mounted() { // ... this.timeline = new TimelineLite({ onComplete: () => this.timeline.restart() }) // ... } } </script> <style> /* CSS Emitted */ </style>现在 GASP 将会在动画完成后又重新开始,效果如下:https://codepen.io/smlparry/pen/dqmEax
添加交互性
现在,我们的动画效果已经写得差不多了,可以考虑添加一些交互特效。在本例中,我们将添加一个按钮,来随机更新气泡中的logo。为了能做到该需求,我们必须做以下几件事:
- 将图片的引用源地址绑定到 VUE 的data中
- 创建要使用的图片数组
- 创建随机获取logo的方法
添加按钮来更改logo
<template> <div class="bubble-wrapper"> <div ref="bubble" class="bubble"> <img class="bubble-image" :src="/UploadFiles/2021-04-02/currentLogo">有了上面的代码,现在我们可以通过一个按钮来更新制作运行动画的元素,通史也可以对其进行动画制作,效果:https://codepen.io/smlparry/pen/RYMXPx
我使用了与上面动画非常类似的技术来实现主页的动画效果,我从数组中选择列表的下一个元素,然后将其append到列表中。
总结
以上所述是小编给大家介绍的通过GASP让vue实现动态效果实例代码详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]