前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从 0到1,开发一个动画库(1)

从 0到1,开发一个动画库(1)

作者头像
企鹅号小编
发布于 2018-02-02 06:20:31
发布于 2018-02-02 06:20:31
2.1K0
举报
文章被收录于专栏:编程编程

作者:jshao

https://segmentfault.com/a/1190000012923589

如今市面上关于动画的开源库多得数不胜数,有关于CSS、js甚至是canvas渲染的,百花齐放,效果炫酷。但你是否曾想过,自己亲手去实现(封装)一个简单的动画库?

本文将从零开始,讲授如何搭建一个简单的动画库,它将具备以下几个特征:

从实际动画中抽象出来,根据给定的动画速度曲线,完成“由帧到值”的计算过程,而实际渲染则交给开发者决定,更具拓展性

支持基本的事件监听,如 、 、 、 ,及相应的回调函数

支持手动式触发动画的各种状态,如 、 、 、

支持自定义路径动画

支持多组动画的链式触发

完整的项目在这里:点赞行为高尚!,欢迎各种吐槽和指正^_^

OK,话不多说,现在正式开始。

作为开篇,本节将介绍的是最基本、最核心的步骤——构建“帧-值”对应的函数关系,完成“由帧到值”的计算过程。

目录结构

首先介绍下我们的项目目录结构:

是本项目的根目录,各文件的作用分别如下:

index.js 项目入口文件

core.js 动画核心文件

easing.js 存放基本缓动函数

引入缓动函数

所谓动画,简单来说,就是在一段时间内不断改变目标某些状态的结果。这些状态值在运动过程中,随着时间不断发生变化,状态值与时间存在一一对应的关系,这就是所谓的“帧-值”对应关系,常说的动画缓动函数也是相同的道理。

有了这种函数关系,给定任意一个时间点,我们都能计算出对应的状态值。OK,那如何在动画中引入缓动函数呢?不说废话,直接上代码。

首先我们在core.js中创建了一个类:

我们在构造函数中对实例调用函数,对其初始化:将传入的参数保存在实例属性中。

当你看到的时候可能不大明白:外界传入的到底是啥?其实是一个数组,它的每一个元素都保存着独立动画的起始与结束两种状态。这样说好像有点乱,举个栗子好了:假设我们要创建一个动画,让页面上的div同时往右、左分别平移300px、500px,此外还同时把自己放大1.5倍。在这个看似复杂的动画过程中,其实可以拆解成三个独立的动画,每一动画都有自己的起始与终止值:

对于往右平移,就是把css属性的 的0px变成了300px

同理,往下平移,就是把 的0px变成500px

放大1.5倍,也就是把 从1变成1.5

因此传入的value应该长成这样:。我们将数组的每一个元素依次保存在实例的value属性中。

此外,是由外界提供的渲染函数,即,它的作用是:动画运动的每一帧,都会调用一次该函数,并把计算好的当前状态值以参数形式传入,有了当前状态值,我们就可以自由地选择渲染动画的方式啦。

接下来我们给Core类添加一个循环函数:

的作用是:倘若当前时间进度还未到终点,则根据当前时间进度计算出目标现在的状态值,并以参数的形式传给即将调用的渲染函数,即,并继续循环。如果大于,则将目标的运动终止值传给,运动结束,将状态设为。

代码中的是从tween.js文件引入的缓动函数,tween.js的代码如下(网上搜搜基本都差不多= =):

最后,给类增加方法:

core.js的完整代码如下:

在html中引入它后就可以愉快地调用啦^ _ ^

看到这里,本文就差不多结束了,下节将介绍如何在项目中加入各类事件监听及触发方式。

本系列文章将会继续不定期更新,欢迎各位大大指正^_^

觉得本文对你有帮助?请分享给更多人

关注「前端大全」,提升前端技能

本文来自企鹅号 - 前端大全媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 前端大全媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让动画更优雅–缓动算法
有些人是那种又菜又爱玩的,比如说我,最近想写个主题,主题动画细节也是一个非常重要的地方,但是动画算法我太懒了,想直接抄过来,jq是有算法插件的,可是这带个jq,更自由的我,选择隔壁大佬推荐的Tween.js
月萌
2020/06/12
2K0
开发中的动效设计与实现 —— 贝塞尔曲线动画的插值法
一个动画一般有这些参数 —— 动画时间、属性变化量、以及贝塞尔插值曲线。在动效标注的时候,也只需要标注这些参数就可以完整的给UI研发写动效了。一个动效所涉及的元素属性变化,也就是'动画'在设计输出的效果视频中就可以很明确的表述,而'过渡'使用贝塞尔插值和函数来描述可以说是最有效最直观的方法了。
蜻蜓队长
2018/08/03
4.1K0
开发中的动效设计与实现 —— 贝塞尔曲线动画的插值法
学习 PixiJS — 补间动画
版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/FE_dev/article/details/87022028
FEWY
2019/05/26
2.3K0
深入浅出 CSS 动画
本文将比较全面细致的梳理一下 CSS 动画的方方面面,针对每个属性用法的讲解及进阶用法的示意,希望能成为一个比较好的从入门到进阶的教程。
Sb_Coco
2022/03/10
1.8K0
深入浅出 CSS 动画
JavaScript学习笔记019-原生js运动框架0时间运动框架
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 吾日三省吾身 学习 学习 学习 Nodejs又来了 下个月笔记更新 前端果然是一项需要活到老学到老的语言 当你登上这座船 几乎永远不可能再停下来 <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='en'> <!-- html根标签 翻译文字:英文 --> <head> <!-- 网页头部 --> <meat charset='UTF-8'/> <
Mr. 柳上原
2018/09/05
9600
惊!Three.js 动画从“零基础菜鸟”到“技术大神”的蜕变之旅
在 Three.js 中,动画是实现动态视觉效果的核心功能之一。无论是简单的物体移动,还是复杂的角色动画,Three.js 都提供了强大的工具和灵活的接口来满足各种需求。本文将从基础动画、骨骼动画和第三方动画库三个方面,详细介绍如何在 Three.js 中实现动画效果。
Front_Yue
2025/03/18
871
惊!Three.js 动画从“零基础菜鸟”到“技术大神”的蜕变之旅
Threejs进阶之十二:Threejs与Tween.js结合创建动画
Tween.js是一个可以产生平滑动画效果的js库,其官方地址为:https://github.com/tweenjs/tween.js/,可以将源码下载后,可以在tween.js/dist/文件夹下找到相应的js代码,在HTML中进行引用;也可以通过npm命令在终端控制台中安装tween.js模块 npm install @tweenjs/tween.js 然后在相应的页面引用Tween.js import * as TWEEN from '@tweenjs/tween.js'
九仞山
2023/05/04
5.6K3
Threejs进阶之十二:Threejs与Tween.js结合创建动画
Three.js 的 3D 粒子动画:群星送福
粒子是指原子、分子等组成物体的最小单位。在 2D 中,这种最小单位是像素,在 3D 中,最小单位是顶点。
神说要有光zxg
2022/03/03
4.6K0
Three.js 的 3D 粒子动画:群星送福
又来了!实现微信 “炸屎”大作战
大家好,我是秋风,近日,微信又发布了新功能(更新到微信8.0.6)。最火热的非"炸屎"功能莫属了,各种群里纷纷玩起了炸屎的功能。
秋风的笔记
2021/07/09
1.4K0
JavaScript动画基本原理
在现在做页面很多时候都会用上动画效果。比如下拉菜单,侧边搜索栏,层的弹出与关闭等等。通常我们实现这些动画效果可以采用 JavaScript与CSS3两种方式来实现。本文主要介绍JavaScript动画,CSS3的动画下次在总结。对于JavaScript动画 目前有很多的动画插件库,如: Jquery等等.以下就简单介绍以下JavaScript动画的实现原理。
全栈程序员站长
2022/11/03
1.2K0
手把手教你用Flutter做炫酷动画
导读:随着技术的发展,很多网页开发技术都带有动画效果,比如淡入淡出、渐变、变大变小,等等。Flutter中的动画效果可以用酷炫来形容,这也是Flutter的一大特色。现代的应用程序不仅仅需要程序稳定、好用,还需要好看,体验好。那么动画效果是必不可少的。
IT阅读排行榜
2019/12/10
1.9K0
手把手教你用Flutter做炫酷动画
动画:从 AE 到 Web,‘甩锅’给设计师
接下来因工作调整,应该就很少接触 H5 开发了。借此机会总结对动画的一些个人思考。
用户4962466
2019/08/02
3.4K0
使用GSAP创建惊艳的动画效果(一)
GSAP语法由三部分组成,分别是方法、目标和变量,其调用格式为gsap.to( “.box” ,{ x:200 })各部分含义如下图所示:
九仞山
2023/10/14
3.5K0
使用GSAP创建惊艳的动画效果(一)
3分钟学会在小程序开发纸飞机动画
14年以上开发经验,对client和server开发都有着深刻认知,现在依然每周都在学习数学。
京东技术
2018/09/28
2.4K0
3分钟学会在小程序开发纸飞机动画
你所不知道的 CSS 动画技巧与细节
怕标题起的有点大,下述技巧如果你已经掌握了看看就好,欢迎斧正,本文希望通过介绍一些 CSS 不太常用的技巧,辅以一些实践,让读者可以更加深入的理解掌握 CSS 动画。 废话少说,直接进入正题,本文提到
Sb_Coco
2018/05/28
6620
前端动画实现笔记
动画:动画是通过快速连续排列彼此差异极小的连续图像来制造运动错觉和变化错觉的过程。
赤蓝紫
2023/01/02
1.6K0
前端动画实现笔记
探索 MotionLayout 动画世界
MotionLayout是ConstraintLayout的子类,具有ConstraintLayout的所有功能。
Rouse
2024/06/12
1850
探索 MotionLayout 动画世界
【CSS】398- 原生JS实现DOM爆炸效果
此次分享是一次自我组件开发的总结,还是有很多不足之处,望各位大大多提宝贵意见,互相学习交流。
pingan8787
2019/11/05
3.5K0
第3章 让场景动起来
这一节课,我们要让场景动起来,不禁想到了郭富城的一首歌《动起来》。心中有很多感慨,觉得时间过得太快,自己还没有多大的成功。以淡淡的感伤开始这节课的讲解。
webvrmodel模型网
2023/01/03
1.1K0
详解TWEEN.JS 补间动画
tweenJS是一个简单的javascript补间动画库,支持数字,对象属性,CSS样式等的动态效果过渡,允许平滑的修改元素的属性值。告诉它需要改变的元素的开始值和结束值,并设置好过渡时间,补间动画将会自动计算从开始到结束的状态,并产生平滑的动画变换效果。 tweenjs在threejs中经常作为过渡动画使用,所以做了一些学习说明,供以后方便查阅。
acoolgiser
2020/11/06
4K0
相关推荐
让动画更优雅–缓动算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文