Html5頁面內使用JSON動畫的實現

来源:https://www.cnblogs.com/good10000/archive/2019/03/24/10590213.html
-Advertisement-
Play Games

有一天我們的UI設計師找到我說,要把頁面中我自己用程式寫的動畫,換成他們給的json動畫,原因是有的動畫很複雜,自己寫起來達不到他們的預期效果(寫到這裡我突然想到一個問題,這麼複雜的動畫為什麼不使用gif。。。。坐我對面的安卓開發小哥答因為gif播放的時候可能質量不高不流暢,好吧我信了) 我:??? ...


有一天我們的UI設計師找到我說,要把頁面中我自己用程式寫的動畫,換成他們給的json動畫,原因是有的動畫很複雜,自己寫起來達不到他們的預期效果(寫到這裡我突然想到一個問題,這麼複雜的動畫為什麼不使用gif。。。。坐我對面的安卓開發小哥答因為gif播放的時候可能質量不高不流暢,好吧我信了)

我:????客戶端可以加json動畫,H5頁面沒聽說過可以讀json動畫哎

設計師一臉肯定,說可以的,有web版本。

寫到這裡,我真的要好好誇一波我們的設計師妹子了,幾乎很多蠻好的解決方法都是在他們的“逼迫”之下找到的(哦,她們還會寫H5頁面。。。要我有何用系列

那問題來了,怎麼在H5頁面裡面使用json動畫呢

樹形菜單如何在H5頁面內使用json動畫

這時候設計師甩了一個鏈接給我,看這裡lottie-web ;我點進去瞭解了一下,是Airbnb開源的一個動畫庫,該庫可以完成很多酷炫動畫,使用起來也很簡單,設計師只需要通過AE做成的動畫導出JSON文件,然後前端使用Lottie直接載入JSON文件生成動畫,既不需要設計師切N多gif,也不需要前端去進行複雜繪製了,一舉兩得,並且,Lottie全平臺可用,ios、Android、web、React Native都可以,且占用記憶體少,載入流暢。(這麼個神仙東西我為什麼現在才發現。。

說了這麼多,那怎麼在H5頁面裡面使用呢?

很簡單了,設計師生成的文件夾發給你(設計師那邊只用在AE中加個lottie插件,導出就行了),打開之後應該是這樣子的,打開demo.html就知道是怎麼用的了(所以我還在這裡寫什麼技術文章

玩笑歸玩笑,其實在使用中還是碰到了很多坑的,這裡記錄幾個使用時註意的地方

1.demo.html裡面有很多內聯的東西,圖片選項卡使用時堆積在頁面內不好看

仔細看一下,其實demo.html把js和json都放進去了,這時候我們可以把js和json單獨分出來,js的話可以使用cdn上提供的地址

?
1 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.4.3/lottie.min.js"></script>

動畫需要的json數據放在data.json文件裡面,但是給出的json文件裡面的數據格式是這樣的(太長了 截不完

那如果你要在單獨的一個html裡面使用script的方式引入json文件的話,會報錯,所以需要修改json文件,在前面加上變數,賦值。如下圖:

這樣你可以通過像引入js文件的方式一樣的引入該json

?
1 <script type="text/javascript" src="./data.json"></script>

這樣可用的demo.html就縮減成了下麵這樣

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <html xmlns="http://www.w3.org/1999/xhtml"> <meta charset="UTF-8"> <head>     <style>         body{                          margin: 0px;             height: 100%;             overflow: hidden;         }         #lottie{                          width:100%;             height:100%;             display:block;             overflow: hidden;             transform: translate3d(0,0,0);             text-align: center;             opacity: 1;         }       </style> </head> <body>     <div id="lottie"></div>   <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.4.3/lottie.min.js"></script>   <script type="text/javascript" src="./data.json"></script>   <script>     var params = {         container: document.getElementById('lottie'),         renderer: 'svg',         loop: true,         autoplay: true,         animationData: animationData     };       var anim;       anim = lottie.loadAnimation(params);   </script> </body> </html>

當然,你如果使用的是js模塊化編程的話,可以不用更改data.json,直接import進來就行了,如下:

?
1 import animationData from './data.json'

2.使css3動畫適配移動端

之所以覺得這是個坑是因為,設計師給我的動畫是全屏且非透明底的,然後她要求我將這個動畫以寬度100% 高度垂直居中截取的方式定位,我在瀏覽器裡面試了下,360*640屏幕下,寬度100%,表現形式是這樣的(看上去是高度100% 寬度適配居中 兩邊漏出了黑色的背景色,見下圖藍色框起來的部分)

換成iPhone X的屏幕下,相反,表現出來是寬度100% 高度適配居中,上下漏出黑色背景色,見下圖藍色框起來的部分(究其原因是因為iphonex屏幕較長

這個佈局好熟悉哇,跟img的object-fit屬性取值為contain的時候表現一致(object-fit也是寶藏,有興趣的同學可以去研究一下,非常好用)

我這裡解決設計師的需求主要增加下麵的代碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 js部分: setTimeout(function() {     document.getElementsByTagName('svg')[0].style.height = 'auto'; }, 50); css部分:(給lottie增加flex佈局) #lottie {     width:100%;     height:100%;     transform: translate3d(0,0,0);     text-align: center;     opacity: 1;     position: absolute;     top: 0;     left: 0;     z-index: 3;     display: flex;     flex-direction: row;     justify-content: center;     align-items: center; }

最終效果:

總結

以上圖片截圖都是靜態的,實際是有一個動態效果的,我不知道怎麼添加動圖就沒弄了,感興趣的可以試一下。

適用範圍:我感覺一般全屏的或者局部很複雜的動畫可以使用這個方法一試,比gif要流暢,相容性也做得不錯,一些安卓產品比較酷炫的開屏就是使用的這個方法,H5頁面的話,簡單動畫一般自己程式實現就可以,還可以避免踩坑。

參考鏈接:
lottie官網
lottie-web github地址


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、獲取頁面上的iframe 1-1、 document.getElementById('iframeId'); 1-2、 window.frames[0]、window.frames['frameName']、frames['frameName']、frames[0]、self.frames[0] ...
  • 事件綁定 1.bind(type,[data],fn) --type: 含有一個或多個事件類型的字元串,由空格分隔多個事件。比如"click"或"submit",還可以是自定義事件名。 --data:作為event.data屬性值傳遞給事件對象的額外數據對象 --fn:綁定到每個匹配元素的事件上面的 ...
  • 準備 語言:TypeScript 工具:Visual Studio Code 演示:Audio Visualiazer 小明告訴我,他希望打開一個網頁,立即聽到他喜歡的音樂,如果有視覺特效就更棒了。 第一節 本地音頻 “可是我的電腦里沒有 MP3 文件!” “為什麼需要打開一個本地文件?”小明問。 ...
  • webpack 什麼是webpack 官方解釋:webpack 是一個現代 JavaScript 應用程式的靜態模塊打包器(module bundler)。什麼意思呢?就是可以把你開發項目時用到的所有資源全部打包成一個js文件,然後項目在上線階段引入這個js文件就行了,它會自動幫你展出你... ...
  • js的運算符 算術運算符 加法 + 減法 - 乘法 * 除法 / 餘數 % number類型的和number類型的 number類型和boolean類型(true--1,false--0) number類型和string類型(+,-,*,/) string類型和string類型的數字(+,-,*,/ ...
  • 問題: 在網頁的發展歷程中,發現網頁不能對用戶的數據進行自動校驗,和提供一些特效。 解決: 使用javascript。 作用 可以讓網頁和用戶進行直接簡單的交互。 可以讓網頁製作特效和動畫。 聲明js代碼域 1.<script type="text/javascript"></script> 2.< ...
  • 本文介紹了Canvas引入跨域的圖片導致toDataURL()報錯的問題的解決,分享給大家,具體如下: 【場景】 用戶打開網頁,則請求騰訊COS(圖片伺服器)上的圖片js代碼。使用canvas繪圖。 然後,用戶可以重新選擇圖片、裁剪、上傳。 【問題】 圖片首次載入,選擇新圖片後裁剪、繪製都沒有問題。 ...
  • 以下為你簡略介紹javaScript語法中創建對象的內容。 主要包括:字面量模式創建、調用系統構造函數創建、工廠模式創建、自定義構造函數創建、原型模式創建共五種。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...