摘要:發(fā)現(xiàn)倉(cāng)庫(kù)被了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的。雖然這個(gè)簡(jiǎn)介有點(diǎn)短,但是該篇的目的并不在于讓大家了解這個(gè)矩陣動(dòng)畫,而是想讓大家一起來(lái)豐富這個(gè)倉(cāng)庫(kù)。
前段時(shí)間,發(fā)布了一篇文章:學(xué)不動(dòng)了,來(lái)點(diǎn)有趣的吧。發(fā)現(xiàn) github 倉(cāng)庫(kù)被 frok 了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的 Pull Request。
簡(jiǎn)介該項(xiàng)目名叫 matrixchange ,編寫的目的在于方便開(kāi)發(fā)者實(shí)現(xiàn)矩陣動(dòng)畫,當(dāng)然該項(xiàng)目已經(jīng)發(fā)布到 npm ,使用 npm/yarn 安裝即可。
該庫(kù)為開(kāi)發(fā)者提供了一個(gè)數(shù)組和一個(gè)函數(shù),具體的文檔可以查看上一篇文章,或是在 github 上查看更為詳細(xì)的內(nèi)容。
ok 簡(jiǎn)介到此完畢。雖然這個(gè)簡(jiǎn)介有點(diǎn)短,但是該篇的目的并不在于讓大家了解這個(gè)矩陣動(dòng)畫,而是想讓大家一起來(lái)豐富這個(gè)倉(cāng)庫(kù)。
接下來(lái)進(jìn)入正題。
動(dòng)畫形式 何為矩陣動(dòng)畫?簡(jiǎn)單來(lái)說(shuō)就是有一個(gè)矩陣,然后讓它動(dòng)起來(lái),效果如下:
這就是一個(gè)簡(jiǎn)單的矩陣動(dòng)畫,動(dòng)畫形式如何?
從右上到左下按照斜線進(jìn)行運(yùn)動(dòng)
那么動(dòng)畫效果呢?
翻轉(zhuǎn)消失,然后翻轉(zhuǎn)呈現(xiàn)
animite.css 可以解決絕大多數(shù)的動(dòng)畫效果,而且 animite.css 中的動(dòng)畫也大致可以分為入場(chǎng)動(dòng)畫好出場(chǎng)動(dòng)畫兩個(gè)大類,既然如此,那么我們實(shí)現(xiàn)矩陣動(dòng)畫中需要的動(dòng)畫效果迎刃而解,我們僅需要豐富動(dòng)畫形式即可。
抽象既然我們準(zhǔn)備批量實(shí)現(xiàn)我們的動(dòng)畫形式,那么抽象是必要的,按照之前給的效果圖,這個(gè)是我抽象出來(lái)的對(duì)象:
{ 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 | 每次(獲取需要運(yùn)動(dòng)的點(diǎn))的時(shí)間間隔 |
duration | number | transition 動(dòng)畫專用,用于設(shè)置 transition 的持續(xù)時(shí)間,animate 動(dòng)畫不需要 |
init | Function | 每次動(dòng)畫開(kāi)始前會(huì)調(diào)用,用于初始化對(duì)象信息 |
check | Function | 用于確定每次需要運(yùn)動(dòng)的點(diǎn) |
next | Function | 每次(獲取需要運(yùn)動(dòng)的點(diǎn))后都會(huì)調(diào)用該函數(shù),用于重置判斷條件 |
end | Function | 判斷該動(dòng)畫是否結(jié)束 |
動(dòng)畫具體的執(zhí)行流程為
將矩陣的行列傳入 init 函數(shù)
設(shè)置以 interval 為時(shí)間間隔的定時(shí)器
遍歷矩陣中所有的點(diǎn),傳入 check 函數(shù),確定該點(diǎn)是否需要運(yùn)動(dòng)
執(zhí)行 next 函數(shù)
執(zhí)行 end 函數(shù),若函數(shù)返回 true 則取消定時(shí)器,動(dòng)畫結(jié)束
結(jié)合上面的內(nèi)容,不難想象出,剛剛的對(duì)象觸發(fā)矩陣中的點(diǎn)如下(以 row = 7; col = 9 為例)
定時(shí)器第一次觸發(fā)時(shí),運(yùn)動(dòng)的塊為 [0, 8]
定時(shí)器第二次觸發(fā)時(shí),運(yùn)動(dòng)的塊為 [0, 7],[1, 8]
定時(shí)器第三次觸發(fā)時(shí),運(yùn)動(dòng)的塊為 [0, 6],[1, 7],[2, 8]
...
也就是從右上到左下,每一次動(dòng)一條斜線。也是實(shí)現(xiàn) gif 圖中的動(dòng)畫形式,配合 animate.css 就能完成效果圖展示的效果。
注意點(diǎn)init/check/next/end 函數(shù)中的 this 代表本對(duì)象,也就是擁有該方法的對(duì)象
this 下也可設(shè)置任意值,這是 js 的特性,js 的對(duì)象非固定字段,所有設(shè)置任意值都 ok
最好不要將值設(shè)置到對(duì)象外部,避免互相影響,所以為了方便調(diào)用,最好都設(shè)置在 this 對(duì)象下,如上述的 row/col/count
由于動(dòng)畫效果會(huì)被調(diào)用 n 次,所以要記得在 init 方法內(nèi)將自定義設(shè)置在 this 下的值進(jìn)行初始化。避免由于上次動(dòng)畫修改了某值,但沒(méi)有初始化導(dǎo)致動(dòng)畫效果在第 2 次時(shí)有變化。
定義既然我們是用 typescript 進(jìn)行開(kāi)發(fā),該對(duì)象的完整定義如下:
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; }
只要符合該定義的對(duì)象,就可以認(rèn)為是一個(gè)符合要求的動(dòng)畫形式,但是動(dòng)畫的執(zhí)行是否完整(動(dòng)畫執(zhí)行是否將所有矩陣中的點(diǎn)都觸發(fā)了一遍),不在庫(kù)的考慮范圍內(nèi),這點(diǎn)需要你,也就是該動(dòng)畫形式的編寫者確定。
開(kāi)發(fā)環(huán)境ok 看到這里是否已經(jīng)有些騷氣的一批的動(dòng)畫在你的腦海中呈現(xiàn),很想實(shí)現(xiàn)它吧~
那么如何來(lái)驗(yàn)證你的動(dòng)畫是否完整呢?
方式一安裝好 matrixchange 后,按照 github 上提供的文檔,先將矩陣初始化好,然后調(diào)用 movePoint 將你寫好的對(duì)象傳入即可。
什么?麻煩?對(duì)!
確實(shí)挺麻煩的,還要自己寫個(gè) html 可能還要配置 webpack 開(kāi)發(fā)環(huán)境等一系列雜七雜八的東西,寫個(gè)動(dòng)畫形式為什么還要配置這么多無(wú)關(guān)緊要的步驟呢?其實(shí)我都已經(jīng)給你配置好啦~
方式二按照以下步驟
git clone https://github.com/acccco/matrixChange.git
先將項(xiàng)目克隆到本地,當(dāng)然可以先 fork 然后克隆你自己的項(xiàng)目,推薦先 fork。
npm i # or yarn
安裝項(xiàng)目依賴。
npm run dev
運(yùn)行程序,然后瀏覽器打開(kāi) http://localhost:8080/ 即可。
對(duì)了,那該在哪里編寫你的運(yùn)動(dòng)形式呢?
項(xiàng)目下有 dev 文件夾,在文件夾內(nèi),我已經(jīng)寫好了布局,寫好了初始化方法,你所要做的就是找到 movePoint 這個(gè)方法,然后將該方法的第一次參數(shù)改成你所寫好的對(duì)象即可。
什么?我原來(lái)文件中 movePoint 的第一個(gè)參數(shù) line.rt2lb 是什么鬼?
說(shuō)明一下,我將已經(jīng)實(shí)現(xiàn)的效果按照分類放在了 src/mode 文件夾,四個(gè)方向分別使用縮寫代替。
l - 左 r - 右 t - 上 b - 下 i - 內(nèi)部 o - 外部 R - 代表前面所表示運(yùn)動(dòng)的反向 Anti - 逆時(shí)針
如 line.rt2lb 所代表的運(yùn)動(dòng)形式為:從右上到左下的線性運(yùn)動(dòng)。
src/mode 文件夾中已經(jīng)實(shí)現(xiàn)的有 6 大類,32 種動(dòng)畫形式。大概說(shuō)明一下
文件名 | 代表意思 | 例子 | 說(shuō)明 |
---|---|---|---|
line.js | 線性運(yùn)動(dòng) | line.r2l line.rt2lb | 每次運(yùn)動(dòng)一條直線 |
L.js | L 形運(yùn)動(dòng) | L.lt2rb L.lt2rbR | 每次運(yùn)動(dòng)一個(gè) L 形狀的區(qū)域 |
circle.js | 回字形運(yùn)動(dòng) | circle.i2o | 每次運(yùn)動(dòng)一圈 |
spread.js | 擴(kuò)散運(yùn)動(dòng) | spread.random | 由一個(gè)中心點(diǎn)進(jìn)行擴(kuò)散,每次擴(kuò)散一圈 |
loop.js | 繞圈運(yùn)動(dòng) | loop.lt | 由某個(gè)頂點(diǎn)進(jìn)行繞圈運(yùn)動(dòng) |
random.js | 隨機(jī)運(yùn)動(dòng) | random.t2b | 線性隨機(jī)運(yùn)動(dòng) |
更為詳細(xì)的介紹可以查看 src/mode 中的具體文件,大家可以將動(dòng)畫形式放入 movePoint 中查看具體的動(dòng)畫效果。
當(dāng)然,已經(jīng)實(shí)現(xiàn)的運(yùn)動(dòng)形式大家也可以看看有沒(méi)有更加簡(jiǎn)單的編寫方式,優(yōu)化原本的代碼。
總之,有了想法那就開(kāi)始行動(dòng)吧,不管是新想法,還是優(yōu)化我原本的實(shí)現(xiàn),都?xì)g迎 Pull Request。當(dāng)然可能有了想法,但時(shí)間上不允許,也可以在 Issues 上記錄,大家可以一起幫你實(shí)現(xiàn)。
最后最后再次提供 github 地址,歡迎大家 Pull Request 。
喜歡的話 可以點(diǎn)個(gè) star 哦,感謝~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/114777.html
摘要:發(fā)現(xiàn)倉(cāng)庫(kù)被了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的。雖然這個(gè)簡(jiǎn)介有點(diǎn)短,但是該篇的目的并不在于讓大家了解這個(gè)矩陣動(dòng)畫,而是想讓大家一起來(lái)豐富這個(gè)倉(cāng)庫(kù)。 前段時(shí)間,發(fā)布了一篇文章:學(xué)不動(dòng)了,來(lái)點(diǎn)有趣的吧。發(fā)現(xiàn) github 倉(cāng)庫(kù)被 frok 了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的 Pull Request。 簡(jiǎn)介 ...
摘要:如果你想減少包大小,你可以這樣引入事實(shí)上,每個(gè)組件都是支持單獨(dú)安裝的,我們也推薦你使用這種方式引入組件。以下是運(yùn)行示例后各界面的截圖組件圖標(biāo)右上角的圓形徽標(biāo)數(shù)字。 1. 前言 一直以來(lái)都想做個(gè)組件庫(kù),一方面是對(duì)工作中常遇問(wèn)題的總結(jié),另一方面也確實(shí)能夠提升工作效率(誰(shuí)又不想造一個(gè)屬于自己的輪子呢~),于是乎就有了本文的主角兒rn-components-kit。 市面上web的UI組件庫(kù)如...
摘要:在容器領(lǐng)域內(nèi),已經(jīng)成為了容器編排和管理的社區(qū)標(biāo)準(zhǔn)。就是的邏輯擴(kuò)展,它的核心目標(biāo)是為了更加高效和安全的應(yīng)用發(fā)布。第二個(gè)問(wèn)題就是,生產(chǎn)環(huán)境的發(fā)布權(quán)限一般都是需要嚴(yán)格控制的,通常只有應(yīng)用管理員或者運(yùn)維管理員才有生產(chǎn)發(fā)布權(quán)限。 為了解決傳統(tǒng)應(yīng)用升級(jí)緩慢、架構(gòu)臃腫、不能快速迭代、故障不能快速定位、問(wèn)題無(wú)法快速解決等問(wèn)題,云原生這一概念橫空出世。云原生可以改進(jìn)應(yīng)用開(kāi)發(fā)的效率,改變企業(yè)的組織結(jié)構(gòu),甚...
閱讀 1711·2021-11-11 10:58
閱讀 4184·2021-09-09 09:33
閱讀 1256·2021-08-18 10:23
閱讀 1548·2019-08-30 15:52
閱讀 1624·2019-08-30 11:06
閱讀 1867·2019-08-29 14:03
閱讀 1506·2019-08-26 14:06
閱讀 2942·2019-08-26 10:39