评论

原生微信小程序开发,使用 lottiejs-miniapp 实现 Lottie 动画的播放

原生微信小程序开发,使用 lottiejs-miniapp 实现 Lottie 动画的播放

在原生微信小程序开发中,使用 lottiejs-miniapp 实现 Lottie 动画的播放。

lottiejs-miniapp 基于 lottie-web ,当前使用的 lottie-web 版本号为: 5.8.1

“动效”微信小程序 演示:


        打开微信开发工具:

        我在这里新建了一个代码片段作为演示:

     (代码片段https://developers.weixin.qq.com/s/Eo0K1emN7zwj

         

        

        1、在项目目录(我这里是在index目录)执行命令,初始化 npm 项目:   

npm init

     

2、安装 lottiejs-miniapp 组件:

npm i lottiejs-miniapp

        安装完 lottiejs-miniapp 组件后,我们可以发现在 index 目录下多出了一个 node_modules 文件夹,里面将包含 lottiejs-miniapp。

        

3、构建 npm

        这是很重要的一步,在微信开发者工具 -- 顶部菜单  -- 工具 中找到“构建 npm”功能,并点击。



        开发者工具提示“完成构建”即可。

       构建npm完成后,会在项目中多出一个 miniprogram_npm 文件夹,如下:

       

 4、下一步,我们开始进行动画的调用。

    

        第一,打开 index.wxml 文件,我们需要在页面文件中 预置一个 <canvas> 组件:

<canvas id="lottiejs-canvas" canvas-id="lottiejs-canvas" class="lottiejs-canvas" type="2d"></canvas>

其中,id 和 canvas-id 都命名为"lottiejs-canvas"

        第二,打开 index.js  文件,先引入 lottiejs-miniapp

import * as lottie from 'lottiejs-miniapp'

        


         第三,在 index.js  文件,onReady() 中使用如下代码调用动画

wx.createSelectorQuery().select('#lottiejs-canvas').fields({node: true, size: true}).exec(res => {
      const canvas = res[0].node;
      const ctx = canvas.getContext('2d');
  
  
      const dpr = wx.getSystemInfoSync().pixelRatio;
      canvas.width = res[0].width * dpr;
      canvas.height = res[0].height * dpr;
      ctx.scale(dpr, dpr);
  
  
      lottie.setup(canvas);
      lottie.loadAnimation({
        loop: true,
        autoplay: true,
        //animationData: animationData,
        path: 'https://www.lottiejs.com/wp-content/uploads/2022/01/83351-taking-the-duggy-out.json',
        rendererSettings: {
          context: ctx,
        },
      });
    });


大家主要替换 loadAnimation 中的 path 参数为自己Lottie动画json文件的http地址即可。

        我们使用了一个测试动效json:

https://www.lottiejs.com/wp-content/uploads/2022/01/83351-taking-the-duggy-out.json

        大家一定注意执行时要开启 不校验域名的 功能。

第四,在 index.wxss  文件,可以对 <canvas> 组件添加样式,也可以在此为Lottie 动效添加背景颜色效果:

.lottiejs-canvas{
  width: 100%;
  height: 300px;
  background-color: rgb(255, 187, 0);
}

        


到此,我们就可以预览动画效果了:



     

代码片段地址:https://developers.weixin.qq.com/s/Eo0K1emN7zwj


代码片段使用注意事项:

1、填写自己的小程序测试appid;

2、执行 npm install 安装依赖;

3、执行构建 npm 功能。

最后一次编辑于  2022-01-11  
点赞 3
收藏
评论

1 个评论

  • 王爱明
    王爱明
    2022-01-12

    谢谢大神的分享,我这边在模拟器里面可以运行,真机动画出不来,调试报下面的异常.

    weapp:///miniprogram_npm/lottiejs-miniapp/index.js:2 发现 Lottie 动态创建 canvas 组件,但小程序不支持动态创建组件,接下来可能会出现异常

    u @ weapp:///miniprogram_npm/lottiejs-miniapp/index.js:2

    VM13:2 Unhandled promise rejection TypeError: Cannot read property 'createView' of undefined

        at uh._initCanvasInstance (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1169347)

        at uh._init (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1155787)

        at t (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1155950)

        at uh._onReady (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1155982)

        at eval (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1680341)

        at new j (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:48089)

        at _R (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1680318)

        at eval (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1682553)

        at Array.forEach (<anonymous>)

        at eval (eval at Te.n.call.document (runtime.js?devtools_ignore=true:1), <anonymous>:2:1682536)

    2022-01-12
    赞同
    回复 1
    • 2022-01-12
      真机调试模式对canvas 2D的支持存在问题,使用预览调试,或发布线上体验版就行了,不影响线上使用,你试试看。
      2022-01-12
      1
      回复
登录 后发表内容