嘗試用 vue 實現滅霸打響指英雄消失的效果 demo

寫在前面

滅霸打響指的消失效果。效果來源於 Google 搜索「滅霸」 或者 「thanos」。算是蹭熱度的一個 Feature, 我經過 F12 試圖去查看是如何實現的,也摳了一些音頻、圖片資源下來。後來在 github 上找到了一個現有的項目 Thanos_Dust, 因此參考了部分它的代碼。 其實它的代碼已經算比較完善了,在它的基礎上,我用 vue 來寫了一下,加了一些英雄,修復了一些 bug ,加了一些效果之類的。html

demo

  • 點擊一下手套,伴隨音效和響指的動畫,會有一半的英雄消失。
  • 消失以後,再點一下,消失的英雄又會回來。

能夠點擊下面的連接體驗一下前端

demosvue

細節

  • 隨機選取一半的英雄,是經過下面的算法進行選取的:git

    arr.sort(function() {
      return 0.5 - Math.random();
    });
    複製代碼
  • 被選中的英雄灰飛煙滅的效果解釋:github

    1. 使用 html2canvas 庫將每個英雄所在的 dom 節點渲染爲一個 canvas 節點
    2. 經過 generateFrames 方法,將整塊的 canvas 畫布圖像按像素分割成許多塊
    3. 建立一個跟選中的英雄所在的 dom 節點同一個位置、一樣的大小的容器覆蓋原 dom 節點
    4. 把第二步建立的塊繪製到新的畫布上,並都經過 appendChild 方法添加到第三步建立的父容器中
    5. 隨機設置每一塊的 rotate 角度和 translate 像素,就能完成灰飛煙滅的效果
    6. 將被覆蓋的英雄的 dom 節點設置爲不可見的,就完成了響指操做。
  • 翻轉時間,英雄又回來的效果是將原來的 dom 節點設置爲可見的,並加了回覆動畫。( google 的原版恢復動畫是將 color 設置爲 green ,由於這裏沒什麼文字效果並不明顯,就設置成了 background-color算法

最後

整個過程其實跟 vue 沒什麼關係,不管用什麼前端技術棧均可以。之前也沒有接觸過 canvas ,彷佛以爲還有點意思, 後面可能慢慢還會作一些改動,會繼續學習 canvas 。最後附上 github 地址.canvas

相關文章
相關標籤/搜索