国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

朋友,這里有個倉庫需要你 PR 一下

ISherry / 2387人閱讀

摘要:發現倉庫被了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的。雖然這個簡介有點短,但是該篇的目的并不在于讓大家了解這個矩陣動畫,而是想讓大家一起來豐富這個倉庫。

前段時間,發布了一篇文章:學不動了,來點有趣的吧。發現 github 倉庫被 frok 了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的 Pull Request

簡介

該項目名叫 matrixchange ,編寫的目的在于方便開發者實現矩陣動畫,當然該項目已經發布到 npm ,使用 npm/yarn 安裝即可。

該庫為開發者提供了一個數組和一個函數,具體的文檔可以查看上一篇文章,或是在 github 上查看更為詳細的內容。

ok 簡介到此完畢。雖然這個簡介有點短,但是該篇的目的并不在于讓大家了解這個矩陣動畫,而是想讓大家一起來豐富這個倉庫。

接下來進入正題。

動畫形式 何為矩陣動畫?

簡單來說就是有一個矩陣,然后讓它動起來,效果如下:

這就是一個簡單的矩陣動畫,動畫形式如何?

從右上到左下按照斜線進行運動

那么動畫效果呢?

翻轉消失,然后翻轉呈現

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 為例)

定時器第一次觸發時,運動的塊為 [0, 8]

定時器第二次觸發時,運動的塊為 [0, 7],[1, 8]

定時器第三次觸發時,運動的塊為 [0, 6],[1, 7],[2, 8]

...

也就是從右上到左下,每一次動一條斜線。也是實現 gif 圖中的動畫形式,配合 animate.css 就能完成效果圖展示的效果。

注意點

init/check/next/end 函數中的 this 代表本對象,也就是擁有該方法的對象

this 下也可設置任意值,這是 js 的特性,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 哦,感謝~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104471.html

相關文章

  • 朋友這里有個倉庫需要 PR 一下

    摘要:發現倉庫被了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的。雖然這個簡介有點短,但是該篇的目的并不在于讓大家了解這個矩陣動畫,而是想讓大家一起來豐富這個倉庫。 前段時間,發布了一篇文章:學不動了,來點有趣的吧。發現 github 倉庫被 frok 了很多次,因此下定決心要好好的把代碼整理一下,方便大家查看代碼以及更加愉快的 Pull Request。 簡介 ...

    roadtogeek 評論0 收藏0
  • 小哥哥小姐姐看過來,這里有個組件庫需要您簽收一下

    摘要:如果你想減少包大小,你可以這樣引入事實上,每個組件都是支持單獨安裝的,我們也推薦你使用這種方式引入組件。以下是運行示例后各界面的截圖組件圖標右上角的圓形徽標數字。 1. 前言 一直以來都想做個組件庫,一方面是對工作中常遇問題的總結,另一方面也確實能夠提升工作效率(誰又不想造一個屬于自己的輪子呢~),于是乎就有了本文的主角兒rn-components-kit。 市面上web的UI組件庫如...

    Alan 評論0 收藏0
  • GitOps:Kubernetes多集群環境下的高效CICD實踐

    摘要:在容器領域內,已經成為了容器編排和管理的社區標準。就是的邏輯擴展,它的核心目標是為了更加高效和安全的應用發布。第二個問題就是,生產環境的發布權限一般都是需要嚴格控制的,通常只有應用管理員或者運維管理員才有生產發布權限。 為了解決傳統應用升級緩慢、架構臃腫、不能快速迭代、故障不能快速定位、問題無法快速解決等問題,云原生這一概念橫空出世。云原生可以改進應用開發的效率,改變企業的組織結構,甚...

    wdzgege 評論0 收藏0

發表評論

0條評論

ISherry

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<