前端如何播放序列帧、动画,以VUE项目为例

这篇具有很好参考价值的文章主要介绍了前端如何播放序列帧、动画,以VUE项目为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:制作酷炫的动画效果

在做一些大屏可视化项目中,经常会看到一些很酷炫的,具有科技风的动画

当然如果可以通过CSS或者JS来实现当然是最佳的选择,但奈何这些高级的动画,纯前端实现起来太困难了,所以介绍一些,另一种实现方式,那就是通过序列帧的方式,只需要加载后期处理好的序列帧

实现思路:通过请求动画帧requestAnimationFrame

在前端我们可以通过setIntervalrequestAnimationFrame这些方式制作动画效果

setInterval和requestAnimationFrame区别

  1. 执行时机:

    • setInterval 在指定的时间间隔内重复执行代码。它不考虑浏览器的刷新率,因此在一些高刷新率的屏幕上可能执行得比较频繁。
    • requestAnimationFrame 会在浏览器每次绘制新的帧时执行回调函数。它会在浏览器的刷新周期内执行,通常为每秒 60 次,但浏览器可以根据屏幕的刷新率进行优化。
  2. 性能:

    • requestAnimationFrame 更加高效。由于它与浏览器的渲染周期同步,可以避免不必要的重绘,减少了浏览器的工作负担。
    • setInterval 不会被浏览器优化,可能会在不同的环境下产生不一致的效果,尤其在性能较差的设备上。
  3. 暂停和恢复:

    • 使用 clearInterval 可以很容易地暂停和取消 setInterval
    • 对于 requestAnimationFrame,要实现类似的暂停和取消,需要维护一个标志来控制循环的执行。
  4. 函数参数:

    • setInterval 接受两个参数,第一个是要执行的函数,第二个是时间间隔(以毫秒为单位)。
    • requestAnimationFrame 接受一个回调函数作为参数,回调函数会在浏览器准备好渲染下一帧时执行。
  5. 适用场景:

    • setInterval 适用于需要在固定时间间隔内执行的任务,例如定时器、轮播图等。
    • requestAnimationFrame 更适用于动画和需要与浏览器的渲染同步的任务,避免掉帧和提高性能。

总的来说,如果涉及到动画或者需要与浏览器渲染同步的任务,推荐使用 requestAnimationFrame。如果只是简单的定时任务,可以考虑使用 setInterval。在一些场景下,两者也可以结合使用,根据实际需求选择合适的方法

requestAnimationFrame简直就是为动画而生,用three.js的开发者或者在前端渲染大量数据的时候对这个函数应该多少有点熟悉吧

上面也说到了requestAnimationFrame是每秒执行60次,那我们如何改变动画的执行速度呢,比如我们每秒执行30次呢?带着这个疑问接着往下看,算了还是直接给出代码吧

import { onMounted, ref } from "vue";
import { onBeforeRouteLeave } from "vue-router";

export default function (root: string, max: number, fps = 24) {
    const currentFrame = ref(root + 0 + ".png");
    let index = 0;
    let animation: number | null = null;
    const frameInterval = 1000 / fps;
    let lastTimestamp = 0;

    const render = (timestamp: number) => {
        if (!lastTimestamp) lastTimestamp = timestamp;

        const elapsed = timestamp - lastTimestamp;

        if (elapsed >= frameInterval) {
            index > max ? (index = 0) : index;
            currentFrame.value = root + index + ".png";
            index++;
            lastTimestamp = timestamp;
        }

        animation = requestAnimationFrame(render);
    };

    onMounted(() => {
        animation = requestAnimationFrame(render);
    });

    onBeforeRouteLeave(() => {
        if (animation !== null) {
            cancelAnimationFrame(animation);
        }
    });

    return {
        currentFrame
    };
}

这里是一VUE项目为例子,将其封装成一个hooks,在生命周期onMounted的时候开始,在onBeforeRouteLeave的时候卸载该动画,返回一个周期性改变的ref变量

接收三个参数,第一个root,也就是动画帧所在的根目录,第二个max,也就是动画帧的最大值,不能超出,否则取不到值,所里面index被限制在了0到max之间,最后一个就是我们的速度了

注意序列帧需要按如下命名,方便index变量拼上根目录组成的路径找到对于的序列帧

前端序列帧动画,前端小技巧,前端,vue.js,javascript

使用方法如下,很简单,先引入钩子,然后将反出来的currentFrame绑到<img />元素即可,至于为什么不用css的background-image,接着往下看

// 先引入
import animate from '@/hooks/frames'
const rootPath = "framesImages/parkOverview/大标题/";
const {currentFrame} = animate(rootPath,27,28)
// 绑定上去
<img :src="currentFrame" class="title-bg" alt="" srcset="" />
  1. 使用 background-image

    • 优点:

      • 样式控制: 你可以使用 CSS 控制图像的大小、位置、重复等。
      • 适用于装饰性背景: 如果序列帧是背景效果,而不是文档的一部分,使用 background-image 可能更适合。
    • 缺点:

      • 不易控制动画: 对于复杂的动画效果,可能需要使用 CSS 或 JavaScript 动画,这可能变得复杂。
      • 性能考虑: 对于大量的序列帧,可能会导致性能问题。
  2. .sequence { background-image: url('frame1.png'); width: 100px; height: 100px; /* ...其他样式... */ }
  3. 使用 <img> 元素:

    <img src="frame1.png" alt="Frame 1" class="sequence" />
    • 优点:

      • 易于控制: 你可以使用 JavaScript 控制 <img> 元素的显示、隐藏、大小等属性,也可以使用 CSS 进行样式控制。
      • 性能优化: 浏览器会对 <img> 元素进行更好的优化,特别是在加载大量图像时。
    • 缺点:

      • 样式限制: 在处理复杂的样式时,可能不如使用 background-image 灵活。
      • 不适合背景: 如果你希望序列帧作为背景,使用 <img> 元素可能不是最佳选择。

性能考虑:

  • 如果你有大量的序列帧图像,使用 <img> 元素通常更好,因为浏览器可以更好地优化图像加载和缓存。
  • 对于小型的、用于装饰性背景的序列帧,使用 background-image 可能更合适,因为它可以更容易地集成到样式中。

总体来说,最好根据具体情况来选择。如果你的序列帧是装饰性背景,并且对于样式灵活性要求较高,使用 background-image;如果你需要更好的性能和更多的控制权,使用 <img> 元素。

这就是我们用<img> 元素,来渲染动画帧的原因文章来源地址https://www.toymoban.com/news/detail-857543.html

到了这里,关于前端如何播放序列帧、动画,以VUE项目为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3-动画技巧

    Vue 提供了 Transition 和 TransitionGroup 组件来处理元素进入、离开和列表顺序变化的过渡效果。但除此之外,还有许多其他制作网页动画的方式在 Vue 应用中也适用。这里我们会探讨一些额外的技巧。 基于 CSS class 的动画 对于那些不是正在进入或离开 DOM 的元素,我们可以通过给

    2024年02月21日
    浏览(31)
  • 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。 这篇文章就总结一下, Animation

    2024年02月02日
    浏览(99)
  • [MAUI 项目实战] 手势控制音乐播放器(三): 动画

    @ 目录 吸附动画 确定位置 平移动画 回弹动画 使用自定义缓动函数 多重动画 点击动画 项目地址 上一章节我们创建了手势容器控件PanContainer,它对拖拽物进行包装并响应了平移手势和点击手势。 拖拽物现在虽然可以响应手势操作,但视觉效果较生硬,一个优秀的设计要求

    2023年04月09日
    浏览(43)
  • web前端开发教学视频,VUE项目配置ESlint后一些报错解决方式,4个改变你编程技能的小技巧

    ‘no-delete-var’: 2, // 禁止出现未使用的变量 ‘no-unused-vars’: [2, {‘vars’: ‘local’, ‘args’: ‘none’}], // 禁止出现空函数 ‘no-empty-function’: 2, // 禁用不必要嵌套块 ‘no-lone-blocks’: 2, // 这条规则强制执行v-on指令样式,您应该使用速记。 ‘vue/v-on-style’: [2, ‘shorthand’], //*

    2024年04月13日
    浏览(36)
  • Unity | 动画组件篇-动画组件的认识和如何简单使用序列帧

    动画系统包含两个东西: 1.动画 2.控制动画啥时候播放的东西 1.创建Animation界面 首先,有一个面板,名字叫做Animation 我们的动画都是在这上面制作的。 再来一个静止的图片,你通过上面过程打开是这样子的 我们做动画,一般得有个物体,所以想做动画,也要先选择一个初始

    2024年02月15日
    浏览(58)
  • Unity中Animation创建的动画如何指定播放

    使用Unity自带的Animation制作的动画如何指定帧播放和结束? 1.选择需要播放的动画,Inspector面板右键Debug,勾选Legacy 2.添加脚本,挂载脚本

    2024年02月03日
    浏览(52)
  • 前端权限校验(以Vue2为例)

    前端权限校验是一种在前端代码中进行权限验证的方法,用于保护系统资源和数据的安全性。它可以确保只有具有合适权限的用户才能访问受限资源。 路由级别权限控制:通过在前端路由中配置权限信息,可以控制用户能够访问的页面。在访问每个页面之前,校验用户的权限

    2024年02月16日
    浏览(39)
  • < 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>

    Vue 提供了两个内置组件,可以帮助用户制作基于状态( v-if / v-show )变化的过渡和动画: Transition 会在一个元素或组件 进入 和 离开 DOM 时应用动画。本章节会介绍如何使用它。 TransitionGroup 会在一个 v-for 列表中的元素或组件被插入,移动,或移除时应用动画。 TransitionGrou

    2024年02月02日
    浏览(38)
  • 零基础如何使用IDEA启动前后端分离中的前端项目(Vue)?

    点击File--Settings--Plugins--搜索vue.js插件进行安装,下面的图中我已经安装好了 安装node.js 可以去官网下载:安装过程就很简单,直接下一步就行  测试是否安装成功:要使用 管理员方式 打开命令行cmd         安装完成之后,打开命令行工具,输入node -v如果出现版本号,则说

    2024年02月11日
    浏览(61)
  • Vite+Vue3项目如何获取环境配置,并解决前端跨域问题

    根目录新建.env.development和.env.production文件 package.json配置启动参数 vite命令启动项目时,指定mode参数,加载vite.config.ts文件。 配置代理 在vite.config.ts中配置代理 配置vite-plugin-html 通过vite-plugin-html组件,可以将配置文件中的数据,绑定到index.html中,可以实现不同环境的页面ti

    2024年02月19日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包