Di Lottie ¿Quién es Lottie?

fondo

En el proyecto, el esquema de animación comúnmente utilizado para la carga es la animación Gif.

Hay algunos problemas con la animación Gif, como: tamaño de archivo grande, incapacidad de escalar para que coincida con diferentes tamaños y densidades de pantalla, tendencia a la creación de alias, incapacidad para controlar la animación, etc.

Otros esquemas de animación comúnmente utilizados son:

  • Marcos de secuencia png: tamaño de archivo grande, puede distorsionarse en diferentes resoluciones de pantalla
  • Animación SVG: alto costo de implementación, propenso a una restauración de animación baja

Actualmente, el proyecto necesita ser investigado y la animación de Lottie es una solución altamente factible.

imagen.png

Introducción a Lottie

Lottie es una biblioteca de animación de código abierto de airbnb, que admite múltiples plataformas como Android, iOS, Web, React Native y Windows. Proporciona un flujo completo de herramientas desde AE ​​a cada terminal. Los diseñadores pueden exportar animaciones a través del complemento Bodymovin de AE json 文件​​y luego a través de Lottie 实现动画效果.确保动画的还原度

lottie实现的动画效果:

lottie-web

lottie-web admite una variedad de funciones y proporciona funciones complejas de control y monitoreo de animaciones.

Un ejemplo de uso es el siguiente:

lottie.loadAnimation({
  container: animationWindow,
  renderer: 'svg',
  loop: true,
  autoplay: true,
  path: 'https://linwu-hi.github.io/lottie/animation_ll2ddfyg.json'
});

Cómo controlar la reproducción de la animación:

nombre describir
animacion.play Reproducir la animación, comenzando desde el cuadro detenido actualmente
detener Deja de reproducir la animación y vuelve al cuadro 0
pausa Pausa la animación, deteniéndose en el cuadro actual y manteniendo presionado
Ir A Y Detener animation.goToAndStop(value, isFrame); salta a un determinado momento/fotograma y se detiene. isFrame (falso predeterminado) indica si el valor representa el marco o el tiempo (milisegundos)
ir a y jugar animation.goToAndPlay(value, isFrame); salta a un determinado momento/fotograma y reprodúcelo
Ir A Y Detener animation.goToAndStop(30, true); Salta al fotograma 30 y detente
jugarSegmentos animation.playSegments(arr, forceFlag); arr puede contener dos números o una matriz de dos números, forceFlag indica si se debe forzar la reproducción del segmento inmediatamente animation.playSegments([10,20], false); después de reproducir el segmento anterior , reproducir 10-20 fotogramas animation.playSegments([[0,5],[10,18]], true); reproducir directamente 0-5 fotogramas y 10-18 fotogramas
velocidad fijada animation.setSpeed(velocidad); establece la velocidad de reproducción, la velocidad es 1 significa velocidad normal
establecerDirección animation.setDirection(dirección); Establezca la dirección de reproducción, 1 significa reproducción hacia adelante, -1 significa reproducción hacia atrás
destruir animation.destroy(); Eliminar la animación, eliminar la etiqueta del elemento correspondiente, etc. Al desmontar, este método debe llamarse

Escuche los eventos:

nombre describir
datos_listos Después de cargar la animación json
completo La reproducción está completa (no se activará en la reproducción en bucle)
loopComplete Se activa cuando finaliza la reproducción en bucle actual (reproducción en bucle/reproducción sin bucle)
entrarFrame Se activará cada vez que se ingrese un cuadro, cada cuadro se activará durante la reproducción y el método de parada también se activará
inicio de segmento Se activará cada vez que se ingrese un cuadro, cada cuadro se activará durante la reproducción y el método de parada también se activará
DOM Cargado Activado después de que se ha agregado dom relacionado con la animación a html
destruir se disparará cuando se elimine la animación

Actuación de animación de Lottie

imagen.png

Al comparar las animaciones de Lottie y Gif, los datos muestran que las animaciones de Lottie tienen tamaños de archivo más pequeños, velocidades de cuadro más altas y mejor rendimiento.

  • Animación GIF

animación_ll2ewnwn_pequeño.gif

  • LottieAnimación

reaccionar-lottie

react-lottie encapsula lottie-web en un componente de React, lo que facilita su uso en React.

import React from 'react'
import Lottie from 'react-lottie';
import * as animationData from './pinjump.json'
 
export default class LottieControl extends React.Component {
 
  constructor(props) {
    super(props);
    this.state = {isStoppedfalseisPausedfalse};
  }
 
  render() {
    const buttonStyle = {
      display'block',
      margin'10px auto'
    };
 
    const defaultOptions = {
      looptrue,
      autoplaytrue, 
      animationData: animationData,
      rendererSettings: {
        preserveAspectRatio'xMidYMid slice'
      }
    };
 
    return <div>
      <Lottie options={defaultOptions}
              height={400}
              width={400}
              isStopped={this.state.isStopped}
              isPaused={this.state.isPaused}/>
      <button style={buttonStyle} onClick={() => this.setState({isStopped: true})}>stop</button>
      <button style={buttonStyle} onClick={() => this.setState({isStopped: false})}>play</button>
      <button style={buttonStyle} onClick={() => this.setState({isPaused: !this.state.isPaused})}>pause</button>
    </div>
  }
}

vista-lottie

vue-lottie encapsula lottie-web en un componente vue, lo que facilita su uso en vue.

también tienenvue3-lottie

<template>
    <div id="app">
        <lottie :options="defaultOptions" :height="400" :width="400" v-on:animCreated="handleAnimation"/>
        <div>
            <p>Speed: x{{animationSpeed}}</p>
            <input type="range" value="1" min="0" max="3" step="0.5"
                   v-on:change="onSpeedChange" v-model="animationSpeed">
        </div>
        <button v-on:click="stop">stop</button>
        <button v-on:click="pause">pause</button>
        <button v-on:click="play">play</button>
    </div>
</template>
 
<script>
  import Lottie from './lottie.vue';
  import * as animationData from './assets/pinjump.json';
 
  export default {
    name: 'app',
    components: {
      'lottie': Lottie
    },
    data() {
      return {
        defaultOptions: {animationData: animationData},
        animationSpeed: 1
      }
    },
    methods: {
      handleAnimation: function (anim) {
        this.anim = anim;
      },
 
      stop: function () {
        this.anim.stop();
      },
 
      play: function () {
        this.anim.play();
      },
 
      pause: function () {
        this.anim.pause();
      },
 
      onSpeedChange: function () {
        this.anim.setSpeed(this.animationSpeed);
      }
    }
  }
</script>

Supongo que te gusta

Origin juejin.im/post/7264921718422405174
Recomendado
Clasificación