使用序列帧实现动画

序列帧图片:https://lk-webfont.oss-cn-beijing.aliyuncs.com/web/play-qx/LKW/识别动效61张600\*600.png

这个链接有元素的宽高+张数

vue项目

动画组件 test.vue

复制代码
<template>
    <div class="frame_wrap" :style="{'--width': width+'px','--height': height+'px','--count': count, '--duration': duration+'s', '--bgSize': bgSize+'px', '--bgSize1': -bgSize+'px' }"> </div>
</template>
<script lang="ts" setup>
import { computed } from 'vue'
const props:any = defineProps({
    count: {
        type: Number,
        vlaue: 0
    },
    width: {
        type: Number,
        value: 0
    },
    height: {
        type: Number,
        value: 0
    },
    duration: {
        type: Number,
        value: 0
    }
})
const bgSize = computed(() => props.width * props.count)
</script>
<style lang="scss">
.frame_wrap {
    width: var(--width);
    height: var(--height);
    position: absolute;
    background: pink;
    -webkit-animation: frames var(--duration) steps(var(--count)) infinite;
    animation: frames var(--duration) steps(var(--count)) infinite;
    background-position: 0 0;
    background-size:  var(--bgSize) var(--height);
    background-repeat: no-repeat;
    background-image: url(https://lk-webfont.oss-cn-beijing.aliyuncs.com/web/play-qx/LKW/%E8%AF%86%E5%88%AB%E5%8A%A8%E6%95%8861%E5%BC%A0600*600.png);
}

@keyframes frames {
    from {
        background-position-x: 0;
    }

    to {
        background-position-x: var(--bgSize1);
    }
}

@-webkit-keyframes frames {
    from {
        background-position-x: 0;
    }

    to {
        background-position-x: var(--bgSize1);
    }
}
</style>

父组件调用:

<test :width="300" :height="300" :count="61" :duration="6"></test>

微信小程序开发

子组件:

复制代码
子组件:
wxml:
<view class="frame_wrap" style="background-image: url({{url}});--width:{{width}}rpx;--height:{{height}}rpx;--count:{{count}};--duration:{{duration}};"></view>

js:
Component({
  properties: {
    url: {
      type: String,
      value: ""
    },
    count: {
      type: String,
      value: 3
    },
    width:{
      type:String,
      value:360
    },
    height:{
      type:String,
      value:300
    },
    duration:{
      type: String,
      value: 0.3
    },
  },
  data: {

  },
  methods: {

  }
})
wxss:
.frame_wrap {
    width: var(--width);
    height: var(--height);
    animation: frames calc(var(--duration) * 1s) steps(var(--count)) infinite;
    background-position: 0 0;
    background-size: calc(var(--width) * var(--count)) var(--height);
  }
  
  @keyframes frames {
    from {
      background-position-x: 0;
    }
  
    to {
      background-position-x: calc(var(--width) *-1 *var(--count));
    }
  }

父组件调用:

复制代码
<css-animation wx:if="{{hasUnreadMsg == false}}" class="animation-qi" width="300" height="300" count="61" duration="6"
      url="https://lk-webfont.oss-cn-beijing.aliyuncs.com/web/play-qx/LKW/%E8%AF%86%E5%88%AB%E5%8A%A8%E6%95%8861%E5%BC%A0600*600.png"></css-animation>
相关推荐
GISer_Jing5 分钟前
前端开发:提示词驱动的全链路
前端·javascript·aigc
辛-夷8 分钟前
TS封装axios
前端·vue.js·typescript·vue·axios
Swift社区21 分钟前
Vue Router 越写越乱,如何架构设计?
前端·javascript·vue.js
大布布将军24 分钟前
⚡️ 后端工程师的护甲:TypeScript 进阶与数据建模
前端·javascript·程序人生·typescript·前端框架·node.js·改行学it
程序员小易1 小时前
前端轮子(1)--前端部署后-判断页面是否为最新
前端·vue.js·node.js
xiaoxue..1 小时前
列表转树结构:从扁平列表到层级森林
前端·javascript·算法·面试
小oo呆1 小时前
【自然语言处理与大模型】LangChainV1.0入门指南:核心组件Agent
前端·javascript·easyui
Hao_Harrision2 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨ | DrawingApp(画板组件)
前端·react.js·typescript·tailwindcss·vite7
dly_blog2 小时前
Vite 原理与 Vue 项目实践
前端·javascript·vue.js
仅此,2 小时前
前端接收了id字段,发送给后端就变了
java·前端·javascript·spring·typescript