动画与帧率

先看视频,同样的代码,左侧是240刷显示器,右侧是60刷显示器,但是动画中粒子的运动速度不同。

原因是机器的帧率导致了基于帧的动画显示效果不同。

动画的移动距离是相同的,但是在240刷的显示器上,每秒移动240次,在60刷的显示器上,每秒移动60次。这就导致了在高刷显示器上,动画移动的更快。

解决办法是更换基于时间的JS动画库即可。

下面给出复现示例,meethigher/animation-and-frames: animation and frames

frame-animation.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Frame Animation</title><style>* {margin: 0;padding: 0;}#particles-js {position: absolute;width: 100%;height: 100%;background-color: #000;}#particles-js canvas {position: fixed;top: 0;right: 0;bottom: 0;left: 0;}</style>
</head>
<body>
<div id="particles-js"></div><script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
<script>let lastTime = performance.now();particlesJS("particles-js", {"particles": {"number": {"value": 180,"density": {"enable": true,"value_area": 800}},"color": {"value": "#ffffff"},"shape": {"type": "circle","stroke": {"width": 0,"color": "#000000"},"polygon": {"nb_sides": 5},"image": {"src": "img/github.svg","width": 100,"height": 100}},"opacity": {"value": 0.5,"random": false,"anim": {"enable": false,"speed": 1,"opacity_min": 0.1,"sync": false}},"size": {"value": 2,"random": true,"anim": {"enable": false,"speed": 40,"size_min": 0.1,"sync": false}},"line_linked": {"enable": false,"distance": 150,"color": "#ffffff","opacity": 0.4,"width": 1},"move": {"enable": true,"speed": 2,"direction": "bottom-right","random": false,"straight": false,"out_mode": "out","attract": {"enable": false,"rotateX": 600,"rotateY": 1200}}},"interactivity": {"detect_on": "canvas","events": {"onhover": {"enable": false,"mode": "repulse"},"onclick": {"enable": true,"mode": "push"},"resize": true},"modes": {"grab": {"distance": 400,"line_linked": {"opacity": 1}},"bubble": {"distance": 400,"size": 40,"duration": 2,"opacity": 8,"speed": 3},"repulse": {"distance": 200},"push": {"particles_nb": 4},"remove": {"particles_nb": 2}}},"retina_detect": true,"config_demo": {"hide_card": false,"background_color": "#b61924","background_image": "","background_position": "50% 50%","background_repeat": "no-repeat","background_size": "cover"},// 强制将基于帧的动画改成基于时间的动画,但是经过测试发现耗费资源过大,导致运行一会会将电脑卡死。改方案不妥。// "callback": {//     onParticlesUpdate: function () {//         const currentTime = performance.now();//         const deltaTime = (currentTime - lastTime) / 1000; // Time in seconds//         lastTime = currentTime;////         const speedFactor = deltaTime * 60; // Normalize to 60 FPS//         pJSDom[0].pJS.particles.move.speed = 6 * speedFactor;//     }// }});// 重写绘图函数以包含自定义更新逻const originalDraw = pJSDom[0].pJS.fn.particlesDraw;pJSDom[0].pJS.fn.particlesDraw = function () {if (pJSDom[0].pJS.callback && pJSDom[0].pJS.callback.onParticlesUpdate) {pJSDom[0].pJS.callback.onParticlesUpdate();}originalDraw.call(pJSDom[0].pJS);};
</script>
</body>
</html>

time-animation.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Time Animation</title><style>* {margin: 0;padding: 0;}#tsparticles {position: absolute;width: 100%;height: 100%;background-color: #000;}</style>
</head>
<body>
<div id="tsparticles"></div><!-- 引入 tsparticles 库 -->
<script src="https://cdn.jsdelivr.net/npm/tsparticles@2/tsparticles.bundle.min.js"></script>
<script>// 初始化 tsparticlestsParticles.load("tsparticles", {"fpsLimit": 60,  // 限制帧率到 60 FPS"particles": {"number": {"value": 180,"density": {"enable": true,"value_area": 800}},"color": {"value": "#ffffff"},"shape": {"type": "circle","stroke": {"width": 0,"color": "#000000"},"polygon": {"nb_sides": 5},"image": {"src": "img/github.svg","width": 100,"height": 100}},"opacity": {"value": 0.5,"random": false,"anim": {"enable": false,"speed": 1,"opacity_min": 0.1,"sync": false}},"size": {"value": 2,"random": true,"anim": {"enable": false,"speed": 40,"size_min": 0.1,"sync": false}},"line_linked": {"enable": false,"distance": 150,"color": "#ffffff","opacity": 0.4,"width": 1},"move": {"enable": true,"speed": 2,"direction": "bottom-right","random": false,"straight": false,"out_mode": "out","attract": {"enable": false,"rotateX": 600,"rotateY": 1200}}},"interactivity": {"detect_on": "canvas","events": {"onhover": {"enable": false,"mode": "repulse"},"onclick": {"enable": true,"mode": "push"},"resize": true},"modes": {"grab": {"distance": 400,"line_linked": {"opacity": 1}},"bubble": {"distance": 400,"size": 40,"duration": 2,"opacity": 8,"speed": 3},"repulse": {"distance": 200},"push": {"particles_nb": 4},"remove": {"particles_nb": 2}}},"retina_detect": true,"config_demo": {"hide_card": false,"background_color": "#b61924","background_image": "","background_position": "50% 50%","background_repeat": "no-repeat","background_size": "cover"}});
</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 45&#xff0c;周五&#xff0c;坚持不了一点~ 题目详情 [198] 打家劫舍 题目描述 198 打家劫舍 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 虚拟头…

中国科学院西北生态环境资源研究院联合多单位在《PNAS》发文:气候变暖对多年冻土区地上与地下生物量分布的影响

文章简介 论文名称&#xff1a;Changes in above-versus belowground biomass distribution in permafrost regions in response to climate warming&#xff08;气候变暖对多年冻土区地上与地下生物量分布的影响&#xff09; 第一作者及单位&#xff1a;贠汉伯&#xff08;研…

深度学习大体过程

一、深度学习的神秘面纱 深度学习&#xff0c;就像是一个超级魔法师&#xff0c;它能够从海量的数据中提炼出隐藏的秘密&#xff0c;然后利用这些秘密来预测未来、识别图像、翻译语言……简直是无所不能&#xff01;那么&#xff0c;这个魔法师是怎么工作的呢&#xff1f; 二…

代码随想录训练营Day 66|卡码网101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

1.孤岛的总面积 101. 孤岛的总面积 | 代码随想录 代码&#xff1a;(bfs广搜) #include <iostream> #include <vector> #include <queue> using namespace std; int dir[4][2] {1,0,0,1,-1,0,0,-1}; int count; void bfs(vector<vector<int>>&a…

SCI一区TOP|双曲正弦余弦优化算法(SCHO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;J Bai受到双曲正弦余弦函数启发&#xff0c;提出了双曲正弦余弦优化算法&#xff08;Sinh Cosh optimizer, SCHO&#xff09;。 2.算法原理 2.1算法思想 SCHO灵感来源…

1panel + Pbootcms 设置伪静态规则

这里确保我们引用的样式路径是否是这样的&#xff0c;&#xff08;不然可能会设置了伪静态无法加载样式&#xff09; //这种格式在不开起伪静态是可以引入的&#xff0c;一旦开启就不行了,一定要在static 前面加上反斜杠 /<link rel"stylesheet" href"{pbo…

【数据分享】《中国法律年鉴》1987-2022

而今天要免费分享的数据就是1987-2022年间出版的《中国法律年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 自1987年起&#xff0c;《中国法律年鉴》作为一部全面记录中国法律发展进程的重要文献&#xff0c;见证了中国法治建设的每…

python魔法__dir__和__dict__

# 魔法方法dir, __dir__, __dict__class Student:address "wh" # 类属性def __init__(self, name):self.name name # 对象属性self._age 20self.__tel "123456"staticmethoddef static_func():...# __dir__: 查看对象的方法和属性 st Student("z…

【linux】6.9.0系统调用接口列表,一共644个

文件生成命令行&#xff1a; grep "ifdef" /usr/include/x86_64-linux-gnu/bits/syscall.h | awk { print $2 } >/mnt/hgfs/Share/syscall_small.h __NR_FAST_atomic_update __NR_FAST_cmpxchg __NR_FAST_cmpxchg64 __NR__llseek __NR__newselect __NR__sysctl …

Linux服务升级:Almalinux 升级 WebCatlog桌面程序

目录 一、实验 1.环境 2.Almalinux 升级 WebCatlog桌面程序 二、问题 1.Ubuntu如何升级 WebCatlog桌面程序 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本软件IP备注Almalinux9.4 WebCatlog 192.168.204.150 &#xff08;2&#xff09;Termi…

odoo17 小变更4

odoo17 小变更4 1、代码中去除了访问私人地址权限,但翻译中均还有,怪不 model:res.groups,name:base.group_private_addresses msgid "Access to Private Addresses" msgstr "" 代码也查看了,的确没有了此权限组 --><record model="res.g…

大聪明教你学Java | 深入浅出聊 Kafka

前言 &#x1f34a;作者简介&#xff1a; 不肯过江东丶&#xff0c;一个来自二线城市的程序员&#xff0c;致力于用“猥琐”办法解决繁琐问题&#xff0c;让复杂的问题变得通俗易懂。 &#x1f34a;支持作者&#xff1a; 点赞&#x1f44d;、关注&#x1f496;、留言&#x1f4…

35 - 最后一个能进入巴士的人(高频 SQL 50 题基础版)

35 - 最后一个能进入巴士的人 -- sum(weight) over(order by turn) as total,根据turn升序&#xff0c;再求前面数的和 selectperson_name from(selectperson_name,sum(weight) over(order by turn) as totalfromQueue) new_Queue wheretotal<1000 order by total desc lim…

华为终于要“三分天下”

在被苹果iOS、谷歌安卓长期统治的手机操作系统市场中&#xff0c;一个新操作系统要想杀出来需要多久&#xff1f;华为给出的答案是五年。 6月21日&#xff0c;华为迎来了其过去五年来最扬眉吐气的一次开发者大会。大会首日&#xff0c;HarmonyOS NEXT鸿蒙星河版正式开启开发者…

34 - 指定日期的产品价格(高频 SQL 50 题基础版)

34 - 指定日期的产品价格 -- row_number(行号) 生成连续的序号&#xff0c;不考虑分数相同 -- 在2019-08-16之前改的价格&#xff0c;使用最近一期的日期&#xff0c;没有在2019-08-16之前改的价格&#xff0c;默认价格为10 select t.product_id, t.new_price as price from (s…

Idea安装插件刷Leetcode

一、下载插件 idea版本2022以下两个插件都可以用来刷Leetcode 二、登录Leetcode 获取token 登录 三、配置 配置1 配置2 Code FileName C$!velocityTool.leftPadZeros($!{question.frontendQuestionId},4)$!velocityTool.replace(${question.title}," ","&qu…

通过这10个SQL优化手段,让你的SQL提升10倍效率

涉及到SQL优化时&#xff0c;有许多策略和技术可以帮助我们提升查询性能和数据库效率。下面将对10个SQL优化手段详细的说明一下&#xff0c;提供代码。 1.使用索引 在数据库中正确使用索引可以显著提升查询性能。索引可以加速数据的查找和过滤操作。 -- 创建索引 CREATE IND…

Redis进阶 - 朝生暮死之Redis过期策略

概述 Redis 是一种常用的内存数据库&#xff0c;其所有的数据结构都可以设置过期时间&#xff0c;时间一到&#xff0c;就会自动删除。你可以想象 Redis 内部有一个死神&#xff0c;时刻盯着所有设置了过期时间的 key&#xff0c;寿命一到就会立即收割。 你还可以进一步站在死神…

MSPM0G3507 ——GPIO例程讲解2——simultaneous_interrupts

主函数&#xff1a; #include "ti_msp_dl_config.h"int main(void) {SYSCFG_DL_init();/* Enable Interrupt for both GPIOA and GPIOB ports */NVIC_EnableIRQ(GPIO_SWITCHES_GPIOA_INT_IRQN); //启用SWITCHES——A的中断 NVIC_EnableIRQ(GPIO_S…

Java中的Lambda表达式:从入门到精通

Java中的Lambda表达式&#xff1a;从入门到精通 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; Lambda表达式是Java 8引入的一项重要特性&#xff0c;它为Jav…