最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解lottie動畫在vue中的應用

 更新時間:2023年12月27日 08:31:43   作者:guojikun  
Lottie 是一個適用于 Android、iOS、Web 和 Windows 的庫,它使用 Bodymovin 解析導出為 JSON 的 Adobe After Effects 動畫,下面我們就來看看它在vue中的是如何應用的吧

前言

最近我所負責的項目中,我采用了動畫效果,并開始使用 gif 來實現(xiàn)。然而,在實踐過程中,我發(fā)現(xiàn) gif 格式的動畫在 git 中出現(xiàn)了明顯的鋸齒感,這讓我非常困擾。為了追求更完美的表現(xiàn)效果,我最終選擇了 lottie 來實現(xiàn)我的動畫需求。我深知動畫效果的呈現(xiàn)對于用戶體驗至關重要,因此我非常認真地對待每一個細節(jié),希望通過我的努力,為用戶帶來更加流暢、自然的視覺體驗。

Lottie 簡介

Lottie 是一個適用于 Android、iOS、Web 和 Windows 的庫,它使用 Bodymovin 解析導出為 JSON 的 Adobe After Effects 動畫,并在移動設備和 Web 上原生渲染它們!

這是第一次,設計師可以創(chuàng)建和發(fā)布精美的動畫,而無需工程師精心手工重新創(chuàng)建它們。他們說一圖勝千言,請看示例:

上述動畫是在 After Effects 中創(chuàng)建的,可以使用簡單的 JSON 文件在所有平臺上進行本機渲染。

lottie 的安裝

# 由于在 web 端,所以安裝的是 lottie-web
pnpm add lottie-web

lottie 的使用

簡單介紹 lottie 的使用

import lottie from 'lottie-web'
import animationData from 'xx/xx/xx.json'

lottie.loadAnimation({
    animationData,
    loop: true,
    autoplay: true,
    renderer: 'svg',
    container: document.querySelector('container')
})

調(diào)用 lottie.loadAnimation() 以啟動動畫。它將一個對象作為唯一的參數(shù),下面是對象中字段的解釋說明:

  • animationData: 包含導出的動畫數(shù)據(jù)的 Object。
  • path: 動畫對象的相對路徑。(animationData 和 path 互斥)
  • loop: 動畫循環(huán)次數(shù),可選值 true/false/number
  • autoplay: 準備就緒后自動開始播放,可選值 true/false
  • name: 動畫名稱,供將來參考
  • renderer: 設置渲染器,可選值 svg/canvas/html
  • container: 用于渲染動畫的 DOM 元素

它返回您可以通過播放、暫停、setSpeed 等方式控制的動畫實例。

動畫實例中的常用方法

  • anim.play():播放動畫
  • anim.stop():停止動畫
  • anim.pause():暫停動畫
  • anim.setLocationHref(locationHref): 一個參數(shù)通常作為 'location.href' 傳遞。當你在 safari 中遇到掩碼問題時,它很有用,因為你的 url 沒有 “#” 符號。
  • anim.setSpeed(speed):設置動畫速度(1為正常速度)
  • anim.goToAndStop(value, isFrame):跳到某個時刻并停止,第一個參數(shù)是數(shù)值,如果第二個參數(shù)為true,則第一個參數(shù)為幀,如果為false則為時間(默認為false)
  • anim.goToAndPlay(value, isFrame)  跳到某個時刻并播放,第一個參數(shù)是數(shù)值,如果第二個參數(shù)為true,則第一個參數(shù)為幀,如果為false則為時間(默認為false)
  • anim.setDirection(direction):設置方向 (1 為正常.)
  • anim.playSegments(segments, forceFlag):第一個參數(shù)是單個數(shù)組或多個數(shù)組,每個數(shù)組有兩個值(fromFrame,toFrame),第二個參數(shù)是一個布爾值,用于立即強制執(zhí)行
  • anim.setSubframe(flag):如果為 false,它將尊重原始 AE fps。如果為 true,它將盡可能多地更新。 (默認值為true)
  • anim.destroy():銷毀動畫實例

Lottie 中常用的方法

  • lottie.play():通過 name 來指定運行的動畫
  • lottie.stop():通過 name 來指定停止的動畫
  • lottie.setSpeed():通過 name 來指定動畫的速度
  • lottie.setDirection():通過 name 來指定動畫的方向
  • lottie.searchAnimations():查找 class 為 “lottie” 的元素
  • lottie.loadAnimation():加載動畫并返回要單獨控制的動畫實例
  • lottie.destroy():銷毀和釋放資源,DOM 元素將被清空。
  • lottie.registerAnimation():你可以直接用 registerAnimation 注冊一個元素。它必須有 “data-animation-path” 屬性指向 data.json 的 url
  • lottie.setQuality():默認 'high',設置 'high','medium','low',或一個數(shù)字 >1 .提高播放器表現(xiàn)。在一些動畫中,低至2不會顯示任何差異。

name 為 lottie.loadAnimation() 方法中設置的 name

Events

以下是可以直接使用 element.onXxxx 綁定的事件。

  • onComplete
  • onLoopComplete
  • onEnterFrame
  • onSegmentStart

你也可以使用 addEventListener 來處理以下事件:

  • complete:動畫完成時觸發(fā)
  • loopComplete:當 loop 為 true 時,每次加載完成時觸發(fā)
  • enterFrame:每進入一幀就會觸發(fā),播放時每一幀都會觸發(fā)一次
  • segmentStart:每開始進入一幀就會觸發(fā),播放時每一幀都會觸發(fā)一次
  • config_ready:config 初始化時觸發(fā)
  • data_ready:當動畫的所有部分都加載完成時
  • DOMLoaded:當元素被添加到DOM中時
  • destroy:當動畫被銷毀時觸發(fā)

封裝基礎組件

在 vue 中為了使用方便,可以封裝為一個通用組件來使用。

<template>
    <component :is="props.tag" ref="container">
        <slot></slot>
    </component>
</template>

<script>
import lottie from "lottie-web";
import { ref, onMounted, onUnmounted, shallowRef } from 'vue'

// 默認配置
const defaultConfig = {
    renderer: "svg",
    loop: true,
    autoplay: true,
};

const props = defineProps({
    tag: {
        type: String,
        default: "div",
    },
    options: {
        type: Object,
        default: () => ({}),
    },
})

const container = ref(null)
const instance = shallowRef(null)

// 處理配置 animationData 字段中 assets 部分的圖片路徑
// 把 動畫需要的圖片資源,放到 public 目錄下的 lotties目錄下
// 每個動畫資源都在 lotties 下新建一個目錄去存放
const parseAssets = (assets) => {
    const assetsBaseURL = process.env.VUE_APP_ROUTE_BASE_URL + '/lotties'
    return assets.map(item => {
        return {
            ...item,
            u: assetsBaseURL + item.u,
        };
    });
}

const init = () => {
    // 配置
    const conf = {
        ...defaultConfig,
        ...props.options,
    };
    const assets = parseAssets(conf.animationData.assets || []);
    if(conf.animationData) {
        conf.animationData = { ...conf.animationData, assets };
    }
    instance.value = lottie.loadAnimation({
        container: container.value,
        ...conf,
    });
}

onMounted(()=>{
    init();
})

onUnmounted(()=>{
    if (instance.value && instance.value.destroy) {
        instance.value.destroy();
    }
})
</script>

參考

Web (airbnb.io)

到此這篇關于詳解lottie動畫在vue中的應用的文章就介紹到這了,更多相關vue lottie動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue2中基于vue-simple-upload實現(xiàn)文件分片上傳組件功能

    vue2中基于vue-simple-upload實現(xiàn)文件分片上傳組件功能

    這篇文章主要介紹了vue2中基于vue-simple-upload的文件分片上傳組件,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • vue文件使用iconfont解析

    vue文件使用iconfont解析

    這篇文章主要介紹了vue文件使用iconfont解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3.2單文件組件setup的語法糖與新特性總結

    Vue3.2單文件組件setup的語法糖與新特性總結

    ue3上線已經(jīng)很久了,許多小伙伴應該都已經(jīng)使用過vue3了,下面這篇文章主要給大家介紹了關于Vue3.2單文件組件setup的語法糖與新特性總結的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • vue模塊移動組件的實現(xiàn)示例

    vue模塊移動組件的實現(xiàn)示例

    這篇文章主要介紹了vue模塊移動組件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • vue3中使用@vueuse/core中的圖片懶加載案例詳解

    vue3中使用@vueuse/core中的圖片懶加載案例詳解

    這篇文章主要介紹了vue3中使用@vueuse/core中的圖片懶加載案例,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • vue.extend,mixins和vue.component的區(qū)別及說明

    vue.extend,mixins和vue.component的區(qū)別及說明

    Vue.extend 創(chuàng)建Vue的子類,可視為組件構造函數(shù),Vue.mixin 允許全局添加方法或屬性,方便所有組件使用,Vue.component 是插件注冊方法,通過Vue.extend創(chuàng)建的組件實例可以注冊到Vue全局,使其在任何組件中可用
    2024-09-09
  • Vue.nextTick純干貨使用方法詳解

    Vue.nextTick純干貨使用方法詳解

    這篇文章主要為大家介紹了Vue.nextTick使用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • element 動態(tài)合并表格的步驟

    element 動態(tài)合并表格的步驟

    這篇文章主要介紹了element 動態(tài)合并表格的步驟,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • 關于vue-cli3打包代碼后白屏的解決方案

    關于vue-cli3打包代碼后白屏的解決方案

    這篇文章主要介紹了關于vue-cli3打包代碼后白屏的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • VueJS全面解析

    VueJS全面解析

    Vue.js(讀音 /vju&#720;/, 類似于 view) 是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue 采用自底向上增量開發(fā)的設計。這篇文章主要介紹了VueJS全面解析的相關資料,需要的朋友可以參考下
    2016-11-11

最新評論

阳曲县| 嘉黎县| 上蔡县| 北流市| 简阳市| 潼南县| 儋州市| 安陆市| 宿州市| 鄂托克旗| 育儿| 自贡市| 奉贤区| 托克逊县| 宜宾县| 德清县| 温宿县| 治县。| 女性| 军事| 河南省| 屏东县| 青田县| 墨脱县| 隆尧县| 喀什市| 兴文县| 宁乡县| 安庆市| 余江县| 仁寿县| 东安县| 景宁| 金门县| 井陉县| 蛟河市| 莱芜市| 鹰潭市| 治多县| 康马县| 陕西省|