npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@choiceform/ui-lottie

v0.2.1

Published

The default blueprint for ember-cli addons.

Downloads

9

Readme

  • UiLottie 组件使用说明

** 组件用法

*** 动画数据

UiLottie 可以用两种方式传递动画数据,通过 url 或 path 读取动画数据文件,或者直接提供 JSON 格式的数据:

#+BEGIN_SRC htmlbars <UiLottie @path="assets/lottie/example.json" />

 {{!-- 或 --}}
 <UiLottie @path="https://example.com/lottie/example.json" />

 {{!-- 或 --}}
 <UiLottie @data={{this.data}} />

#+END_SRC

在上面第二个例子里的 ~this.data~ 相当于 ~JSON.parse~ JSON 文本数据。

*** 渲染方式

UiLottie 支持切换三种渲染方式,分别是 svg canvashtml

#+BEGIN_SRC htmlbars <UiLottie @path="..." @renderAs="svg" /> <UiLottie @path="..." @renderAs="canvas" /> <UiLottie @path="..." @renderAs="html" /> #+END_SRC

svg 是默认渲染方式。三种渲染方式的对比参见:[[https://github.com/airbnb/lottie-web/wiki/Features][渲染方式的特点]]。

*** 自动播放

UiLottie 默认在渲染后自动播放(一次),通过指定 ~autoplay~ 参数为 ~false~ 可以禁止自动播放。

#+BEGIN_SRC htmlbars <UiLottie @path="..." @autoplay={{false}} /> #+END_SRC

*** 循环播放

UiLottie 默认只会播放一次,通过指定 ~loop~ 参数为 ~true~ 可以开启循环播放模式。

#+BEGIN_SRC htmlbars <UiLottie @path="..." @loop={{true}} /> #+END_SRC

*** 指定名称

lottie 可以为每一个 animation 实例指定一个名字,这个名字是每一个 animation 实例的唯一标识符,当同时存在多个 animation 实例的时候可以使用这个名称来指定 API 操作的 animation 实例是哪一个。关于进阶的 API 操作,参加后文的章节。

UiLottie 默认会使用组件的 this.elementId 作为 animation 实例的名字,也可以通过指定 ~name~ 参数来设置名字。不过通常是不需要的,因为 UiLottie 总是一个组件渲染一个 lottie animation。

#+BEGIN_SRC htmlbars <UiLottie @path="..." @name="my_animation" /> #+END_SRC

*** 是否隐藏

UiLottie 可以通过设定 ~hidden~ 参数来切换动画的可见性。

#+BEGIN_SRC htmlbars <UiLottie @path="..." @hidden={{true}} /> #+END_SRC

** 事件响应

UiLottie 允许传递多种事件回调函数,在动画播放的不同阶段可以获取相关的信息。

**** ~onConfigReady~ 配置参数设定完成后触发,这也是最早响应的事件回调。

**** ~onDataReady~ 动画数据接收完毕后触发。远程 url 数据本身有读取时间,所以这个事件可以确定数据加载是否完成了。

**** ~onDataFailed~ 如果数据加载或读取失败,则此事件会被触发。

**** ~onLoadedImages~ 如果动画数据里包含图片,那么在图片读取完成后此事件会被触发。

**** ~onDOMLoaded~ 动画被成功插入 DOM 之后触发,在此事件之后可以安全的操作动画相关的 DOM 元素。

**** ~onDestroy~ 当动画被销毁的时候会触发此事件。

**** ~onEnterFrame~ 动画由若干帧组成,播放动画就是以一定的速率不断一帧接一帧的渲染,在每一帧开始渲染的时候此事件会被触发。它接收一个参数,具有以下属性:

  • ~type~ 事件类型,其值为: ~enterFrame~
  • ~direction~ 动画方向, ~1~ 为正向, ~-1~ 为反向
  • ~totalTime~ 动画时长,动画的帧数是用时间长度来表示其单位的,单位时长 * 帧数 = 总时长
  • ~currentTime~ 当前帧时间,其值为数字,但不一定是整数

**** ~onComplete~ 当动画播放完毕后会触发此事件,但循环播放的动画并不会触发这个事件。它接收一个参数,具有以下属性:

  • ~type~ 事件类型,其值为: ~complete~
  • ~direction~ 动画方向, ~1~ 为正向, ~-1~ 为反向

**** ~onLoopComplete~ 对于循环播放的动画,每完成一次循环都会触发这个事件。它接收一个参数,具有以下属性:

  • ~type~ 事件类型,其值为: ~loopComplete~
  • ~direction~ 动画方向, ~1~ 为正向, ~-1~ 为反向
  • ~currentLoop~ 当前循环次数,其值为正整数

以下用 onComplete 为例演示以下回调函数的定义和使用

#+BEGIN_SRC typescript export default class extends Controller {

   onComplete(event) {
     console.log(event); // { type: "complete", direction: 1 }
   }

 }

#+END_SRC

#+BEGIN_SRC htmlbars <UiLottie @path="..." @onComplete={{action this.onComplete}} /> #+END_SRC

** 进阶控制

*** 获得动画实例

想要更精细的控制动画的行为,首先要做的是在渲染动画的上下文中获取渲染后的动画实例对象,UiLottie 提供了一个 `afterRender` 钩子函数,会在组件创建 lottie 的动画实例对象之后调用并且将这个实例对象传递给外部的上下文。以下是用法示例:

#+BEGIN_SRC typescript
  export default class extends Controller {

    afterRender(lottie) {
      set(this, 'lottie', lottie);
    }

  }
#+END_SRC

#+BEGIN_SRC htmlbars
  <UiLottie @path="..." @afterRender={{action this.afterRender}} />

  {{!-- 之后,可以用 {{this.lottie}} 访问这个动画的实例对象了 --}}
#+END_SRC

lottie 动画实例对象拥有很多有用的属性和方法,以下分别举例说明。

*** 显示/隐藏

除了之前说的 ~hidden~ 属性之外,还可以使用 lottie 动画实例对象来操作动画的显示/隐藏状态:

#+BEGIN_SRC typescript
  export default class extends Controller {

    hideAnimation() {
      this.lottie.hide();
    }

    showAnimation() {
      this.lottie.show();
    }

  }
#+END_SRC

#+BEGIN_SRC htmlbars
  <UiLottie @path="..." @afterRender={{action this.afterRender}} />

  <button {{action this.hideAnimation}}>隐藏动画</button>
  <button {{action this.showAnimation}}>显示动画</button>
#+END_SRC

*** 播放/停止/暂停

这三种操作仅适用于循环播放的动画,单次动画不能播放/停止/暂停:

#+BEGIN_SRC typescript
  export default class extends Controller {

    playAnimation() {
      this.lottie.play(this.lottie.name); // name 是可选的
    }

    stopAnimation() {
      this.lottie.stop(this.lottie.name); // name 是可选的
    }

    pauseAnimation() {
      this.lottie.togglePause(this.lottie.name); // name 是可选的
    }

  }
#+END_SRC

#+BEGIN_SRC htmlbars
  <UiLottie @path="..." @loop={{true}} @afterRender={{action this.afterRender}} />

  <button {{action this.playAnimation}}>隐藏动画</button>
  <button {{action this.stopAnimation}}>显示动画</button>
  <button {{action this.pauseAnimation}}>暂停/恢复动画</button>
#+END_SRC

*** 反向播放/重新播放

这两种操作既可以用于单次动画也可以用于循环动画,对于循环动画,每次切换反向播放之后都会重置 ~currentLoop~ 。

#+BEGIN_SRC typescript
  export default class extends Controller {

    invertAnimation() {
      this.lottie.setDirection(this.lottie.playDirection * -1);
      this.lottie.play(this.lottie.name);
    }

    replayAnimation() {
      this.lottie.goToAndPlay(0); // 0 代表动画第一帧,当然也可以从其他帧开始播放
    }

  }
#+END_SRC

#+BEGIN_SRC htmlbars
  <UiLottie @path="..." @loop={{true}} @afterRender={{action this.afterRender}} />

  <button {{action this.invertAnimation}}>反向播放</button>
  <button {{action this.replayAnimation}}>重新播放</button>
#+END_SRC