Mark Ku's Blog
在 ChatGPT 開啟在 Claude 開啟

使用 Adobe After Effects 和 Bodymovin 插件,匯出 Lottie 動畫 JSON 檔,並在 Vue 中透過 lottie-api 動態替換文字圖層。匯出時需關閉 Glyphs 選項,並在文字圖層名稱後加上 # 作為 ID。

透過 Adobe After Effect 製作 lottie 動畫,並與 Javascript 互動 Part 1 - 動態替換文字

前言

公司想製作猴子上樹的小遊戲,起因是原本專案有用到 Lottie 動畫,覺得動畫流暢度及體驗感很好,就深入研究了一下,如何用 Adobe After Effect 製作 Lottie 小遊戲動畫,並與 Vue 前端框架做互動。

前置準備

  1. 安裝 Adobe After Effeect
  2. 安裝 Bodymovin 插件 ( for 匯出 lottie的 json )
  3. 開啟『允許腳本及網路存取』 After Effects介面,選取編輯偏好設定一般 勾選 Allow Script to write file and network access After Effects 偏好設定勾選腳本網路存取

讓我們開始開發吧

首先,我們得匯入 Lottie 素材,至 Adobe After Effec

我們可以透過 lottiefiles.com 下載免費的lottie 動畫 json 檔。

LottieFiles網站猴子動畫URL下載介面
LottieFiles網站猴子動畫URL下載介面

回到 Adobe After effect ,點選 Window > Extensions > Bodymovin Adobe After Effects 介面,選單

點選 Import Lottie Anmimation > Bodymovin外掛介面紅框標示Import Lottie Animation按鈕

匯入剛剛的下載的lottie 的動畫 json 檔 Bodymovin 介面匯入 Lottie 動畫 JSON 檔的

匯入成功的畫面
After Effects Bodymovin匯入Lottie JSON檔成功 匯入的動畫會顯示在素材庫裡
After Effects 專案面板顯示匯入的猴子動畫

埋入文字圖層 (Text Layer) 給 Javascript 控制

點選輸入 horizontal type tool > 輸入文字 > "test" After Effects 工具列中選取水平文字工具T圖示

對 text layer > 右鍵 > rename

After Effects 介面中對文字圖層右鍵選取重新命名
After Effects 介面中對文字圖層右鍵選取重新命名

但這邊要非常注意,因為後面要透過 Javascript 控制,因此要透過 "#" 當特殊後缀命名,#字之後字元會轉換成 id。 emample: test#rate

After Effects 介面顯示文字圖層命名為
After Effects 介面顯示文字圖層命名為

最後輸出在網頁的時候,會將 id 挷在所屬的 DOM 上

SVG程式碼中id為rate的群組標籤
SVG程式碼中id為rate的群組標籤

匯出 lottie json 動畫檔

開啟Bodymovin, Window > Extensions > Bodymovin ,並依據下圖操作 Bodymovin匯出Lottie動畫介面,標示路徑、設定與Render按鈕

★★★★★要特別注意 ★★★★★
在輸出成 Lottie 動畫檔,一定要勾選掉 Glyphs ,移掉原有的字型,不然會一直匯出錯誤( Character could not be created ),也不會將文字輸出成 html。 Bodymovin設定介面中的Glyphs選項

我們預期透過 Javascript ,動態去替換掉 Lottie 動畫裡先前指定 id 的文字圖層,這邊以vue 程式碼為例:

撰寫 Example.vue 
<template>
  <div>
    <div class="flex">
      <div ref="monkey" />
    </div>
  </div>
</template>
<script>

import loApi from 'lottie-api'
import lottie from 'lottie-web'
import { numberFormat } from '@/utils'

export default {
  components: {

  },
  data() {
    return {
      lottieAnimation: null
    }
  },
  created() {

  },
  mounted() {
    this.lottieAnimation = this.loadLottieAnimation()
    let count = 1
    const that = this

    // 每兩秒去修改 rate 裡面的值
    setInterval(() => {
      count = count + 0.01
      var api = loApi.createAnimationApi(that.lottieAnimation)
      var elements = api.getKeyPath('test#rate').getElements() // 查找對象
      var ele = elements[0]
      const result = '' + numberFormat(count, 2) // 修改改傳入的值必須是字元串不能是數字,否則會失敗
      ele.setText(result)
    }, 2000)
  },
  methods: {
    loadLottieAnimation() {
      return lottie.loadAnimation({
        container: this.$refs.monkey, // 掛在到對應的 DOM 節點
        loop: true,
        animationData: require('@/assets/lottie/monkey.json'),
        autoplay: true
      })
    }
  }
}
</script>

完成結果

Lottie猴子動畫與動態替換的3.99文字
Lottie猴子動畫與動態替換的3.99文字

Demo 影片連結

結論

Adobe After Effect 本身可透過 Lottie Api 達到前端和動畫做互動,對於撰寫小遊戲真的相當的方便,提供相當多事件及屬性可以調整,像是速度、播放次數、重覆播放,播放完成執行事件等等。

下一章 - 透過 Adobe After Effect 製作 lottie 動畫,並與 Javascript 互動 Part 2 - 進階互動應用

作者

Mark Ku

10 年以上的軟體工程師,做過北美電商與 AI SaaS 訂閱收費系統。現在經營貳陸資訊有限公司(www.226network.com),幫小公司做系統、網站、LINE BOT 與 AI 自動化,也在這裡分享開發筆記與開源工具。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··655

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··574

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··318

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··234

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··231

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
Mark Ku
··225

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1