前言

  通常情况端上做刷礼物动画时,需要播放背景透明的礼物特效动画,这种情况map4相对其他json/webgl/gif/svga等等格式的动画来说体积往往更小且像素会更清晰,更能打动大哥们得打赏~,端上一般引用QGVAPlayer插件播放,而h5需要引入video-animation-player

 

  直接上代码

  第一步:

cnpm i video-animation-player 

 

  第二步:

<template>
  <van-image ref="vedioRef" :src="urlImg" class="mp4-transparent-vedio" />
</template>

<script lang='ts' setup>
import { ref, nextTick } from 'vue'
import Vap from 'video-animation-player'

const show = ref<boolean>(false)
const vedioRef = ref()
const url = ref<string>('')
const urlImg = ref<string>('')
const vapPlayer = ref()

const playVideo = (animation:string = '', animationUrl:string = '', json:string = '', fps:number = 30) => {
  url.value = animation
  urlImg.value = animationUrl
  show.value = true

  nextTick(() => {
    vapPlayer.value = new Vap({
      container: vedioRef.value, // 要渲染的载体,dom元素
      src: url.value, // vap动画地址
      config: json, // 播放vap动画需要的 json文件。必填
      width: window.innerWidth, // 容器宽度
      height: window.innerHeight, // 容器高度
      fps, // 帧数,json文件中有这个视频的帧数的,可以看一下,
      mute: true, // 静音
      type: 2, // 组件基于type字段做了实例化缓存,不同的VAP实例应该使用不同的type值(如0、1、2等)
      loop: false, // 循环
      precache: false, // 预加载视频,下载完再播。小动画建议边下边播,大动画还是先下后播吧,因为太大了或者网络不好,会一卡一卡的。
      beginPoint: 0, // 起始播放时间点(单位秒),在一些浏览器中可能无效
      accurate: true, // 是否启用精准模式(使用requestVideoFrameCallback提升融合效果,浏览器不兼容时自动降级)
    })

    vapPlayer.value.play() // 开始播放
    vapPlayer.value.on("ended", () => {
      // 监听播放完成的事件
      closeVedio()
    })
  })
}

const closeVedio = () => {
  vapPlayer.value.destroy()
  vapPlayer.value = null
  show.value = false
}

defineExpose({
  playVideo,
  closeVedio,
});
</script>

<style scoped lang="scss">
.mp4-transparent-vedio {
  width: 100vw;
  height: 100vh;
}
</style>

 

posted on 2024-11-18 16:01  Tom最好的朋友是Jerry  阅读(1)  评论(0编辑  收藏  举报