DAY8 — 用ngx-lottie動畫製作一個吸引人的首頁

Jason Z
jason-read-code
Published in
6 min readFeb 16, 2022

一個網站要吸引人,除了要有適當的排版,還要有吸引人的文字與豐富的動畫,讓人的目光不由自主地佇足想要瀏覽。

首頁可以說是一個網站的門面,好的首頁會讓人想要繼續看下去,不好的首頁只會讓人馬上上一頁。因此怎麼設計一個吸引人的首頁可說是一門學問。

通常設計的工作會落在UI與UX身上,他們會研究與設計,如何符合使用者需求,與製做精美的首頁。 工程師只要負責實現就好 ,幾乎都不必去煩惱設計過程,而現在我們必須自己發想、自己設計、自己實作。

第一版首頁 — 慘烈的開始偽無印良品風

先給大家看一下負面教材,這是第一版首頁。

由於沒有設計背景,也不懂得如何如何依資訊量的不同,善用不同的字級與粗細,來分類不同重要程度的資訊。

可以看到這個首頁有很大的缺點

  • 左上角的的標題只是暴力地加粗語放大,佔滿整個頁首
  • 標語非常口號,看完之後對於網站想要做什麼沒有任何幫助,也沒有留下任何印象
  • 一開始想要模仿無印良品風格,簡單的背景搭配,搭配一段文字。展現靜謐的力量,沒想到畫虎不成反類犬,不但看起來空洞還沒什麼質感

第二版首頁 — 加上動畫與重新排版做出滿意的首頁

經過第一版慘烈的首頁之後,開始痛定思痛想想到底缺乏什麼。想一想之後,原來是 缺乏對美的認識

加入動畫- 使用lottie

什麼是 lottie

lottie 是由airbnb 所提出的動畫解決方案,讓設計師可以輕鬆設計、工程是可以輕鬆實現,可以彌平設計師與工程師之間溝通的成本。

lottie 解決了工程師什麼問題

在過往,網站要加入動畫,有幾種方法

  • 使用圖片,快速播放,這個也是動畫的原理,但是要管理很多圖片,增加大量的流量,還要控制播放流程撰寫額外程式碼管理
  • 使用GIF,很流行的使用方法。但是GIF為了輕量,通常會壓縮,讓圖片有些許失真。而且圖片尺寸固定,放大之後就會有明顯之珍

使用lottie解決以上問題,lottie使用JSON 檔案去定義圖案與動畫,所以可以非常輕量,而且產生出來會是向量檔案,因此不論什麼尺寸都不會失真。再來動畫效果可以使用程式碼去定義,修改的話就只要微調參數就好,不必再麻煩設計師重新出圖,降低很多溝通來回的成本。

lottie 解決了設計師什麼問題

根據設計師的說法,設計師使用 premiere 設計完畢之後,直接輸出就好,不必再擔心相容性或是會跑掉的問題,對設計師來說也方便很多

取得 lottie 檔案

就算有一個很不錯的解決方案,相信工程師還是不會設計動畫檔案。沒關係,lottie 也有提供免費的檔案提供使用

點擊喜歡的圖案之後,裡面就有下載的按鈕,可以把檔案下載下來

安裝 ngx-lottie

ngx-lottie 是 lottie 的 angular版本,安裝非常簡單

npm i lottie-web ngx-lottie

安裝完畢之後,將 lottie模組引入 angular

app.module.ts

import { NgModule } from '@angular/core';
import { LottieModule } from 'ngx-lottie';
import player from 'lottie-web';
// Note we need a separate function as it's required
// by the AOT compiler.
export function playerFactory() {
return player;
}
@NgModule({
imports: [LottieModule.forRoot({ player: playerFactory })],
})
export class AppModule {}

app.component.ts 設定剛剛加入的日落圖案

iconOpts: AnimationOptions = {
path: '/assets/77378-sunset.json',
autoplay: true,
loop: true,
initialSegment: [10, 88]
};

app.component.html

<nb-layout>
<nb-layout-header fixed> hello-angular </nb-layout-header>
<nb-layout-column>

<div class="container">
<div class="row">
<div class="col">
<!-- 加入 lottie 檔案 -->
<ng-lottie
[options]="iconOpts"
width="100%"
height="100%"
></ng-lottie>
</div>
<div class="col">區塊 2/3</div>
<div class="col">區塊 3/3</div>
</div>
</div>
</nb-layout-column>
<nb-layout-footer fixed> </nb-layout-footer>
</nb-layout>

加入之後,打開頁面,就可以看到動畫這麼簡單就加入囉

以上就是最簡單的版本加入動畫的方法,lottie 的威力不只有這樣,還可以控制要如何播放、要不要重複播放、只播放哪個段落、播放的速度等等的細節,有興趣的可以去看看網站寫的參數,微調出自己喜歡的效果

--

--

Jason Z
jason-read-code

哲學系畢業的前端工程師,大部分時間都在搞鐵路系統,喜歡寫程式外,更喜歡鐵道,欣賞路上每個平凡的風景