炫酷不止一面:探索JavaScript动画的奇妙世界(下)

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • IV. JavaScript动画的优化和性能考虑
  • V. 一些有趣的JavaScript动画示例和案例分析
    • 动态图形和形状变换
    • 页面滚动和平滑滚动效果
  • VI. JavaScript动画的未来发展和趋势
    • Web动画API的发展
    • VR和AR中的JavaScript动画应用
    • 响应式设计和移动端动画

IV. JavaScript动画的优化和性能考虑

当使用 JavaScript 进行动画开发时,以下是一些优化和考虑性能的建议:

  1. 减少重绘和重排:重绘和重排是导致页面性能下降的主要因素之一。为了减少重绘和重排,可以尽量减少对 DOM 的操作,例如合并多次修改为一次,或者使用position:fixed定位来避免布局计算。

  2. 使用硬件加速:硬件加速可以利用图形硬件的能力来加速动画的渲染。可以通过使用translate3drotateZ等 CSS 属性来开启硬件加速。这样可以将动画的计算交由 GPU 处理,提高渲染性能。

  3. 合理使用requestAnimationFramerequestAnimationFrame是一种用于定时循环操作的机制,它可以根据屏幕的刷新率来进行优化。通过将动画的更新逻辑放在requestAnimationFrame回调中,可以确保动画在每一帧都能够以最高效率进行更新。

  4. 图片和资源的优化:对于动画中使用的图片和其他资源,应该进行优化以减少加载时间和内存消耗。可以使用合适的图片格式(如 WebP)、压缩图片大小、使用雪碧图(CSS Sprite)等技术。

此外,还可以考虑使用缓存、懒加载、代码压缩等其他优化策略来提高 JavaScript 动画的性能。最佳的性能优化策略会根据具体的项目需求和场景而有所不同,需要根据实际情况进行评估和调整。

V. 一些有趣的JavaScript动画示例和案例分析

动态图形和形状变换

以下是一些有趣的 JavaScript 动画示例和案例分析,其中包括动态图形和形状变换:

  1. 图形动画:使用 JavaScript 可以创建各种图形动画,例如绘制一个不断变化形状的图形。
// 获取 HTML 元素
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");// 绘制初始图形
ctx.beginPath();
ctx.arc(50, 50, 25, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.strokeStyle = "black";
ctx.lineWidth = 2;
ctx.stroke();// 动画循环
function animate() {// 更新图形的位置和形状ctx.beginPath();ctx.arc(50 + Math.cos(Date.now() / 100) * 10, 50 + Math.sin(Date.now() / 100) * 10, 25, 0, 2 * Math.PI);ctx.fillStyle = "red";ctx.fill();ctx.strokeStyle = "black";ctx.lineWidth = 2;ctx.stroke();// 递归调用自身以实现连续动画requestAnimationFrame(animate);
}animate();

在上面的示例中,使用requestAnimationFrame函数来定时更新图形的位置和形状,实现连续的动画效果。通过改变arc函数的参数,图形会不断改变形状,产生动态的效果。

  1. 形状变换动画:可以使用 JavaScript 实现各种形状的变换动画,例如将一个正方形逐渐变为圆形。
// 获取 HTML 元素
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");// 绘制初始形状(正方形)
ctx.beginPath();
ctx.rect(50, 50, 100, 100);
ctx.fillStyle = "red";
ctx.fill();
ctx.strokeStyle = "black";
ctx.lineWidth = 2;
ctx.stroke();// 动画循环
function animate() {// 计算形状的变形程度var progress = Date.now() / 1000;// 更新形状的路径ctx.beginPath();ctx.arc(50 + 50 * Math.cos(progress * 2 * Math.PI), 50 + 50 * Math.sin(progress * 2 * Math.PI), 50, 0, 2 * Math.PI);ctx.fillStyle = "red";ctx.fill();ctx.strokeStyle = "black";ctx.lineWidth = 2;ctx.stroke();// 递归调用自身以实现连续动画requestAnimationFrame(animate);
}animate();

在上面的示例中,使用requestAnimationFrame函数来定时更新形状的路径,实现从正方形逐渐变为圆形的动画效果。通过改变progress的值,可以控制形状的变形程度,产生不同的动画效果。

这些示例只是一些基本的动画案例,你可以根据自己的需求和创意进行进一步的扩展和修改。

页面滚动和平滑滚动效果

以下是一些有趣的 JavaScript 动画示例和案例分析,其中包括页面滚动和平滑滚动效果:

  1. 页面滚动动画:通过使用 JavaScript,可以实现页面滚动时的动画效果,例如滚动到特定元素时的淡入淡出效果。
// 获取页面元素
var element = document.getElementById("myElement");// 监听页面滚动事件
window.addEventListener("scroll", function() {// 检查元素是否进入视口if (isElementInViewport(element)) {// 应用动画效果element.classList.add("animated");} else {// 移除动画效果element.classList.remove("animated");}
});function isElementInViewport(element) {var boundingClientRect = element.getBoundingClientRect();var viewportHeight = window.innerHeight || document.documentElement.clientHeight;var viewportTop = window.pageYOffset || document.documentElement.scrollTop;var viewportBottom = viewportTop + viewportHeight;return (boundingClientRect.bottom >= viewportTop &&boundingClientRect.top <= viewportBottom);
}

在上面的示例中,使用scroll事件监听页面滚动,并在元素进入视口时应用动画效果。isElementInViewport函数用于检查元素是否在视口中。通过监听滚动事件并根据元素的位置来应用和移除动画效果,可以实现页面滚动时的动态效果。

  1. 平滑滚动效果:可以使用 JavaScript 实现平滑滚动效果,使页面在滚动时更加流畅。
// 获取页面元素
var element = document.getElementById("myElement");// 监听滚动事件
window.addEventListener("scroll", function() {// 计算滚动速度var scrollSpeed = window.pageYOffset / (Date.now() - lastScrollTime);lastScrollTime = Date.now();// 根据滚动速度调整元素的位置element.style.top = scrollSpeed * 10 + "px";
});var lastScrollTime = Date.now();

在上面的示例中,使用scroll事件监听页面滚动,并计算滚动速度。根据滚动速度来调整元素的位置,实现平滑滚动效果。通过实时计算滚动速度并应用于元素的位置,可以使滚动效果更加平滑和流畅。

这些示例只是一些基本的动画案例,你可以根据自己的需求和创意进行进一步的扩展和修改。

VI. JavaScript动画的未来发展和趋势

Web动画API的发展

Web 动画 API(也称为 Web Animations API)是一组用于在 Web 上创建和控制动画的 JavaScript API。它允许开发人员以更直观和高效的方式在 Web 页面上实现动画效果。

Web 动画 API 的发展可以追溯到早期的 Web 动画技术,如使用setTimeoutCSS属性来实现简单的动画。然而,这些方法通常比较繁琐,并且难以实现复杂的动画效果。

随着 HTML5 和 CSS3 的发展,新的动画特性被引入到 Web 中,例如CSStransitionanimation属性。这些属性使得在 Web 上创建简单的动画变得更加容易,但仍然缺乏对动画的更高级控制。

为了满足对更复杂动画控制的需求,Web 动画 API 应运而生。它提供了一系列 API,使得开发人员能够更精细地控制动画的属性、时间轴、关键帧等。

最初的 Web 动画 API 规范是由 W3C 提出的,并在 2014 年开始受到关注。随着时间的推移,Web 动画 API 不断发展和改进,增加了更多功能和特性。

其中一些重要的发展包括:

  • 关键帧动画:允许定义动画的关键帧,从而实现更复杂的动画效果。
  • 动画序列:支持将多个动画组合成一个序列,实现更复杂的动画场景。
  • 动画效果控制:提供了对动画的速度、延迟、循环等效果的控制。
  • 事件监听:允许监听动画的开始、结束和迭代等事件,以便进行交互和回调处理。

Web 动画 API 的发展使得在 Web 上创建复杂和引人入胜的动画效果变得更加容易。它为开发人员提供了更强大的工具,同时也提高了用户体验和 Web 应用的交互性。

需要注意的是,Web 动画 API 的发展仍在进行中,新的特性和规范可能会不断推出。如果你对 Web 动画 API 的最新发展感兴趣,建议关注相关的规范和文档以获取最新信息。

VR和AR中的JavaScript动画应用

JavaScript 在虚拟现实(VR)和增强现实(AR)中也有广泛的应用,可以用于创建动画效果和交互体验。

  1. VR 场景中的动画:在 VR 应用中,可以使用 JavaScript 来控制 3D 场景中的对象动画。通过使用 Three.js 或 A-Frame 等库,可以创建和控制三维场景中的动画效果,例如物体的移动、旋转、缩放等。
// 创建一个 Three.js 场景
const scene = new THREE.Scene();// 创建一个球体对象
const sphere = new THREE.SphereGeometry(0.5, 32, 32);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const sphereMesh = new THREE.Mesh(sphere, material);
scene.add(sphereMesh);// 动画循环
function animate() {requestAnimationFrame(animate);// 使球体旋转sphereMesh.rotation.x += 0.01;sphereMesh.rotation.y += 0.01;
}animate();

在上面的示例中,使用 JavaScript 创建了一个简单的 VR 场景,其中包含一个旋转的球体。通过requestAnimationFrame函数来定时更新球体的旋转角度,实现动画效果。

  1. AR 场景中的动画:在 AR 应用中,可以使用 JavaScript 来创建和控制虚拟对象的动画。例如,可以使用 ARKit 或 ARCore 等 AR 库,结合 JavaScript 来实现对象的动画效果。
// 获取 AR 场景中的锚点
const anchor = new ARKit.Anchor({ transform: new ARKit.Transform({ position: new ARKit.Vector3(0, 0, -0.5) }) });// 创建一个虚拟对象并添加到锚点上
const box = new ARKit.Model({ geometry: new ARKit.SphereGeometry(0.2), material: new ARKit.Material({ color: ARKit.Color.Red() }) });
box.parent = anchor;// 动画循环
function animate() {requestAnimationFrame(animate);// 使对象旋转box.rotation.x += 0.01;box.rotation.y += 0.01;
}animate();

在上面的示例中,使用 JavaScript 创建了一个简单的 AR 场景,其中包含一个旋转的虚拟球体。通过requestAnimationFrame函数来定时更新球体的旋转角度,实现动画效果。

这些只是一些简单的示例,实际的 VR 和 AR 应用可能涉及更复杂的动画和交互效果。JavaScript 提供了丰富的动画 API 和库,可以根据具体需求进行扩展和定制。

响应式设计和移动端动画

响应式设计和移动端动画是 Web 开发中常用的技术,用于提供更好的用户体验。

  1. 响应式设计:响应式设计是一种设计方法,使网站能够根据用户设备的屏幕大小和分辨率自动调整布局和内容展示。它可以确保网站在不同的设备上(如桌面电脑、平板电脑和手机)都能够正常显示,并提供良好的用户体验。
/* 媒体查询是响应式设计的核心 */
@media (max-width: 600px) {/* 在小屏幕上应用特定的样式 */body {font-size: 14px;}
}@media (min-width: 601px) and (max-width: 900px) {/* 在中等屏幕上应用特定的样式 */body {font-size: 16px;}
}@media (min-width: 901px) {/* 在大屏幕上应用特定的样式 */body {font-size: 18px;}
}

在上面的示例中,使用@media媒体查询来根据屏幕大小定义不同的样式。通过设置不同的字体大小,网站可以在不同的屏幕大小上自适应地显示内容。

  1. 移动端动画:移动端动画是指在移动设备上使用的动画效果,可以增强用户界面的交互性和吸引力。常见的移动端动画包括页面过渡动画、按钮点击动画、加载动画等。
@keyframes fadeIn {0% { opacity: 0; }100% { opacity: 1; }
}.page {opacity: 0;animation: fadeIn 1s ease-in-out;
}@keyframes rotate {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}.button {animation: rotate 2s linear infinite;
}

在上面的示例中,使用@keyframes定义了两个关键帧动画fadeInrotate。然后将这些动画应用于元素上,通过指定动画名称、持续时间和动画效果(如ease-in-outlinear)来实现动画效果。

总之,响应式设计可以使网站适应不同的设备和屏幕大小,提供良好的用户体验;而移动端动画可以增强用户界面的视觉效果和交互性。这些技术结合使用可以创建出在移动设备上表现出色的网站和应用。

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

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

相关文章

口袋参谋:运营必备的生意参谋指数免费转换工具!

​至少99.99%的商家都知道&#xff0c;淘宝天猫上交易的指数越高&#xff0c;宝贝的热度就高&#xff0c;那就代表着入店的流量就会有很多。 01 在哪里可以看到指数呢&#xff1f; 其实我们在生意参谋后台&#xff0c;在市场板块或者竞争板块中&#xff0c;是可以看到访问人气…

智慧能源:数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能&#xff0c;是指在电网负荷低谷期将电能用于压缩空气&#xff0c;在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络通信程序…

第二十一章总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机&#xff1b;如图所示&#xff1a; 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;…

JavaScript中的发布订阅和观察者模式:如何优雅地处理事件和数据更新

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-订阅观察者模式 目录 说说你对发布订阅、观察者模式的理解&#xff1f;…

【Java Web学习笔记】4 - DOM文档对象模型

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/javascript 零、在线文档 JavaScript HTML DOM 一、HTML DOM基本介绍 1. DOM全称是Document Object Model文档对象模型 文档<---映射--->对象 2.就是把文档中的标签&#xff0c;属性&#xf…

【链表OJ—反转链表】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1、反转链表题目&#xff1a; 2、方法讲解&#xff1a; 解法一&#xff1a; 解法二&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太…

FPGA时序分析与约束(0)——目录与传送门

一、简介 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭&#xff0c;似乎只有理解了时序约束才能算是真正入门了FPGA&#xff0c;对于FPGA从业者或者未来想要从事FPGA开发的工程师来说&#xff0c;时序约束可以说是一道躲不过去的坎&#xff0c;所以这个系列我们会详细介…

搭建React项目,基于Vite+React+TS+ESLint+Prettier+Husky+Commitlint

基于ViteReactTSESLintPrettierHuskyCommitlint搭建React项目 node: 20.10.0 一、创建项目 安装包管理器pnpm npm i pnpm -g基于Vite创建项目 pnpm create vitelatest web-gis-react --template react-ts进入项目目录安装依赖 $ cd web-gis-react $ pnpm i启动项目 $ pnpm…

SpringBoot3-创建自定义启动器,使用自定义starter启动器

1、创建自定义启动工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

三星有一个特有的重置电脑的应用程序,方便快捷,那就是三星恢复

本文介绍如何将三星笔记本电脑重置为出厂设置。它涵盖了两种方法,它们都适用于Windows 11和Windows 10。 如何用“三星恢复(Samsung Recovery)”重置三星笔记本电脑 许多三星笔记本电脑附带一种名为“三星恢复”的实用程序。这是一个比Windows“重置此电脑”过程更快、更不…

数据结构初阶之二叉树性质练习与代码练习

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力,共赴大厂。 目录 1.前言 2.性质练习 3…

高效便捷的淘宝商品详情关键词搜索API接口

联讯数据可以介绍一些高效便捷的淘宝商品详情关键词搜索API接口。 以下是一些可以考虑使用的API接口&#xff1a; 阿里云搜索引擎API&#xff1a;阿里云搜索引擎API是一个基于云计算技术的搜索引擎&#xff0c;提供商品详情关键词搜索功能。它支持中文搜索&#xff0c;并且具…

VMware安装OpenEuler(安装界面)

本文中使用的OpenEuler版本&#xff1a;22.03 LTS SP2 VMware&#xff1a;17.0.0 一、下载镜像 根据CPU和场景&#xff0c;按需下载 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系统 四、安装操作系统 …

DouyinAPI接口开发系列丨商品详情数据丨视频详情数据

电商API就是各大电商平台提供给开发者访问平台数据的接口。目前&#xff0c;主流电商平台如淘宝、天猫、京东、苏宁等都有自己的API。 二、电商API的应用价值 1.直接对接原始数据源&#xff0c;数据提取更加准确和完整。 2.查询速度更快&#xff0c;可以快速响应用户请求实现…

实验3.5 路由器的单臂路由配置

实验3.5 路由器的单臂路由配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.SWA的基本配置2.RA的基本配置3.在RA上查看接口状态 六、任务验收七、任务小结 一、任务描述 某公司对部门划分了需VLAN之后&#xff0c;发现两个部门之间无法通信&#xff0c;但…

[PyTorch][chapter 5][李宏毅深度学习][Classification]

前言&#xff1a; 这章节主要讲解常用的分类器原理.分类主要是要找到一个映射函数 比如垃圾邮件分类 : c0, 垃圾邮件 c1 正常邮件 主要应用场景&#xff1a; 垃圾邮件分类,手写数字识别,金融信用评估. 这里面简单了解一下&#xff0c;很少用 目录&#xff1a; 1&#xff1a; …

外包干了一个月,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…

Linux--学习记录(2)

解压命令&#xff1a; gzip命令&#xff1a; 参数&#xff1a; -k&#xff1a;待压缩的文件会保留下来&#xff0c;生成一个新的压缩文件-d&#xff1a;解压压缩文件语法&#xff1a; gzip -k pathname(待压缩的文件夹名)gzip -kd name.gz&#xff08;待解压的压缩包名&#x…

Tap虚拟网卡

1 概述 Tap设备通常用于虚拟化场景下&#xff0c;其驱动代码位于drivers/net/tun.c&#xff0c;tap与tun复用大部分代码&#xff0c; 注&#xff1a;drivers/net/tap.c并不是tap设备的代码&#xff0c;而是macvtap和ipvtap&#xff1b; 下文中&#xff0c;我们统一称tap&#…