• web端动效 PAG


    之前写过一篇lottie动效的文章:web端动效 lottie-web 使用,本篇写一下PAG-web的基础使用。

    PAG是腾讯开发,支持移动端、桌面端以及Web端的动效工作流解决方案。目标是降低或消除动效相关的研发成本,能够一键将设计师在 AE(Adobe After Effects)中制作的动效内容导出成素材文件,并快速上线应用于几乎所有的主流平台。

    1. 安装 官方文档
    yarn add libpag
    
    • 1
    1. vue.config.js 加入以下代码
    // ...
    const path = require('path')
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    
    module.exports = defineConfig({
     // ...
     configureWebpack: {
       plugins: [
         // ...
         new CopyWebpackPlugin({
           patterns: [{
             from: path.resolve(__dirname, './node_modules/libpag/lib/libpag.wasm'),
             to: './js/'
           }]
         })
       ]
     }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    简单的接入示例和 Vue / React / PixiJS 等配置示例, 可以点击 这里 查看。

    1. 使用
      创建一个组件MyPag/index.vue
    <template>
      <canvas class="pag" id="pag">canvas>
    template>
    
    <script>
    import { PAGInit } from 'libpag'
    
    export default {
      data () {
        return {
          pagView: null
        }
      },
      created () {
        this.initPag()
      },
      methods: {
        async initPag () {
          const url = '/static/like.pag' // pag文件放在了静态文件夹下 /public/static
          const PAG = await PAGInit()
          const { PAGFile, PAGView } = PAG
    
          // 示例 fetch 请求
          const buffer = await fetch(url).then(res => res.arrayBuffer())
          const pagFile = await PAGFile.load(buffer)
    
          document.getElementById('pag').width = pagFile.width()
          document.getElementById('pag').height = pagFile.height()
          this.pagView = await PAGView.init(pagFile, '#pag')
          this.pagView.setRepeatCount(0)
          this.pagView.play()
        }
      }
    }
    script>
    
    <style lang="scss" scoped>
    .pag {
      width: 200px;
      height: 200px;
    }
    style>
    
    • 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

    示例中pag文件路径,测试素材下载
    在这里插入图片描述
    一个基本的pag动效就出来了
    在这里插入图片描述
    结合实例方法,加入简单的鼠标事件:移入播放,移出暂停。查看API文档

    <template>
      <canvas class="pag" id="pag" @mouseenter="onMouseenter" @mouseleave="onMouseleave">canvas>
    template>
    
    <script>
    import { PAGInit } from 'libpag'
    
    export default {
      props: {
        pagUrl: {
          type: String
        },
        autoplay: {
          type: Boolean
        }
      },
      data () {
        return {
          pagView: null
        }
      },
      mounted () {
        this.initPag()
      },
      methods: {
        async initPag () {
          const url = '/static/like.pag'
          const PAG = await PAGInit()
          const { PAGFile, PAGView } = PAG
    
          const buffer = await fetch(url).then(res => res.arrayBuffer())
          const pagFile = await PAGFile.load(buffer)
    
          document.getElementById('pag').width = pagFile.width()
          document.getElementById('pag').height = pagFile.height()
          this.pagView = await PAGView.init(pagFile, '#pag')
          this.pagView.setRepeatCount(0)
          if (this.autoplay) {
            this.pagView.play()
          }
        },
        onMouseenter () {
          if (!this.autoplay) {
            this.pagView.play()
          }
        },
        onMouseleave () {
          if (!this.autoplay) {
            this.pagView.pause()
          }
        }
      }
    }
    script>
    
    <style lang="scss" scoped>
    .pag {
      width: 200px;
      height: 200px;
    }
    style>
    
    
    • 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
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    在这里插入图片描述

    PAGViewer

    目前 PAG 预览支持 Web、macOS 和 Windows 平台,其中 Web 平台为一个页面,macOS 和 Windows 平台为桌面端应用。进入下载

  • 相关阅读:
    X86与FPGA相结合,基于PIB的AI开发——人体姿态识别
    3个实用性特别强的毕业论文选题思路
    css--内外边距、 盒子模型、位置、浮动
    select 标签自定义样式
    如何在Systemd中使用Shell脚本创建和运行新的服务
    5-3Binding对数据的转换和校验
    MyBatis概述
    TypeScript 的装饰器有哪些?
    D. Yet Another Problem
    Git - 异常处理 : Git | SSL certificate problem: certificate has expired
  • 原文地址:https://blog.csdn.net/z291493823/article/details/132858158