前段时间,发布了一篇文章:学不动了,来点有趣的吧。发现 github 仓库被 frok
了不少次,所以下定决心要好好的把代码整理一下,方便你们查看代码以及更加愉快的 Pull Request
。css
该项目名叫 matrixchange
,编写的目的在于方便开发者实现矩阵动画,固然该项目已经发布到 npm
,使用 npm/yarn
安装便可。html
该库为开发者提供了一个数组和一个函数,具体的文档能够查看上一篇文章,或是在 github 上查看更为详细的内容。webpack
ok 简介到此完毕。虽然这个简介有点短,可是该篇的目的并不在于让你们了解这个矩阵动画,而是想让你们一块儿来丰富这个仓库。git
接下来进入正题。github
简单来讲就是有一个矩阵,而后让它动起来,效果以下:web
这就是一个简单的矩阵动画,动画形式如何?typescript
从右上到左下按照斜线进行运动shell
那么动画效果呢?npm
翻转消失,而后翻转呈现数组
animite.css
能够解决绝大多数的动画效果,并且 animite.css
中的动画也大体能够分为入场动画好出场动画两个大类,既然如此,咱们实现矩阵动画中须要的动画效果迎刃而解,咱们仅须要丰富动画形式便可。
既然咱们准备批量实现咱们的动画形式,那么抽象是必要的,按照以前给的效果图,这个是我抽象出来的对象:
{
interval: 140,
duration: 1000,
init(row, col) {
this.row = row;
this.col = col;
this.count = col;
},
check(i, j) {
return j - i === this.count;
},
next() {
this.count--;
},
end() {
return this.count === -this.row;
}
}
复制代码
字段名 | 类型 | 表明的含义 |
---|---|---|
interval | number | 每次(获取须要运动的点)的时间间隔 |
duration | number | transition 动画专用,用于设置 transition 的持续时间,animate 动画不须要 |
init | Function | 每次动画开始前会调用,用于初始化对象信息 |
check | Function | 用于肯定每次须要运动的点 |
next | Function | 每次(获取须要运动的点)后都会调用该函数,用于重置判断条件 |
end | Function | 判断该动画是否结束 |
动画具体的执行流程为
init
函数interval
为时间间隔的定时器check
函数,肯定该点是否须要运动next
函数end
函数,若函数返回 true
则取消定时器,动画结束结合上面的内容,不难想象出,刚刚的对象触发矩阵中的点以下(以 row = 7; col = 9
为例)
也就是从右上到左下,每一次动一条斜线。也是实现 gif
图中的动画形式,配合 animate.css
就能完成效果图展现的效果。
init/check/next/end
函数中的 this
表明本对象,也就是拥有该方法的对象this
下也可设置任意值,这是 js
的特性,因此设置任意值都 ok
this
对象下,如上述的 row/col/count
n
次,因此要记得在 init
方法内将自定义设置在 this
下的值进行初始化。避免因为上次动画修改了某值,但没有初始化致使动画效果在第 2
次时有变化。既然咱们是用 typescript
进行开发,该对象的完整定义以下:
export type modeType = {
interval: number;
duration?: number;
[propName: string]: any;
init(row: number, col: number): void;
check(i: number, j: number): boolean;
next(): void;
end(): boolean;
}
复制代码
只要符合该定义的对象,就能够认为是一个符合要求的动画形式,可是动画的执行是否完整(动画执行是否将全部矩阵中的点都触发了一遍),不在库的考虑范围内,这点须要你,也就是该动画形式的编写者肯定。
ok 看到这里是否已经有些骚气的一批的动画在你的脑海中呈现,很想实现它吧~
那么如何来验证你的动画是否完整呢?
安装好 matrixchange
后,按照 github 上提供的文档,先将矩阵初始化好,而后调用 movePoint
将你写好的对象传入便可。
什么?麻烦?对!
确实挺麻烦的,还要本身写个 html
可能还要配置 webpack
开发环境等一系列杂七杂八的东西,写个动画形式为何还要配置这么多可有可无的步骤呢?其实我都已经给你配置好啦~
按照如下步骤
git clone https://github.com/acccco/matrixChange.git
复制代码
先将项目克隆到本地,固然能够先 fork
而后克隆你本身的项目,推荐先 fork
。
npm i
# or
yarn
复制代码
安装项目依赖。
npm run dev
复制代码
运行程序,而后浏览器打开 http://localhost:8080/
便可。
对了,那该在哪里编写你的运动形式呢?
项目下有 dev
文件夹,在文件夹内,我已经写好了布局,写好了初始化方法,你所要作的就是找到 movePoint
这个方法,而后将该方法的第一次参数改为你所写好的对象便可。
什么?我原来文件中 movePoint
的第一个参数 line.rt2lb
是什么鬼?
说明一下,我将已经实现的效果按照分类放在了 src/mode
文件夹,四个方向分别使用缩写代替。
l - 左
r - 右
t - 上
b - 下
i - 内部
o - 外部
R - 表明前面所表示运动的反向
Anti - 逆时针
复制代码
如 line.rt2lb
所表明的运动形式为:从右上到左下的线性运动。
src/mode
文件夹中已经实现的有 6
大类,32
种动画形式。大概说明一下
文件名 | 表明意思 | 例子 | 说明 |
---|---|---|---|
line.js | 线性运动 | line.r2l line.rt2lb |
每次运动一条直线 |
L.js | L 形运动 | L.lt2rb L.lt2rbR |
每次运动一个 L 形状的区域 |
circle.js | 回字形运动 | circle.i2o |
每次运动一圈 |
spread.js | 扩散运动 | spread.random |
由一个中心点进行扩散,每次扩散一圈 |
loop.js | 绕圈运动 | loop.lt |
由某个顶点进行绕圈运动 |
random.js | 随机运动 | random.t2b |
线性随机运动 |
更为详细的介绍能够查看 src/mode
中的具体文件,你们能够将动画形式放入 movePoint
中查看具体的动画效果。
固然,已经实现的运动形式你们也能够看看有没有更加简单的编写方式,优化本来的代码。
总之,有了想法那就开始行动吧,不论是新想法,仍是优化我本来的实现,都欢迎 Pull Request
。固然可能有了想法,但时间上不容许,也能够在 Issues
上记录,你们能够一块儿帮你实现。
最后再次提供 github 地址,欢迎你们 Pull Request
。
喜欢的话 能够点个 star
哦,感谢~