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

news2024/11/27 4:20:27

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过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.coloradmin.cn/o/1296228.html

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

相关文章

C#云LIS系统源码 B/S架构,SaaS模式,可扩展性强

基于B/S架构的云LIS检验系统源码&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式&#xff0c;部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封装、分…

3D材质编辑:制作被火烧的木头

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

AI材料专题报告:AI革命催生新需求国产替代推动新方向

今天分享的AI系列深度研究报告&#xff1a;《AI材料专题报告&#xff1a;AI革命催生新需求国产替代推动新方向》。 &#xff08;报告出品方&#xff1a;光大证券&#xff09; 报告共计&#xff1a;25页 1、算力需求增长催生 800G 光模块需求 算力是数字经济时代新生产力&…

基于深度学习yolov5钢材瑕疵目标检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv5钢材瑕疵目标检测系统特性1. 数据预处理2. 模型架构3. 训练策略4. 后处理 性能评估 二、功能三、系统四. 总结 一项目简介 # YOLOv5 钢材瑕疵目标…

Navicat 技术指引 | 适用于 GaussDB 分布式的查询功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

优化算法 学习记录

文章目录 相关资料 优化算法梯度下降学习率牛顿法 随机梯度下降小批量随机梯度下降动量法动量法解决上述问题 AdaGrad 算法RMSProp算法Adam学习率调度器余弦学习率调度预热 相关资料 李沐 动手学深度学习 优化算法 优化算法使我们能够继续更新模型参数&#xff0c;并使损失函…

flutter TextPainter 的用法

本文章基于 Flutter 3.16.2 Dart SDK 3.2.2。 TextPainter 是 Flutter 中用于在 Canvas 上绘制文本的类。它允许您在自定义的 CustomPainter 中使用 drawText 方法来绘制文本&#xff0c;并可以控制文本的位置、颜色、字体等属性。 import package:flutter/material.dart;cla…

如何使用 Wordpress?托管, 网站, 插件, 缓存

这是该系列教程的第一个教程&#xff0c;最终将在运行高性能 LEMP 堆栈的阿里云 ECS 实例上运行一个新的 WordPress 站点。 在本教程中&#xff0c;我们将创建一个运行 Ubuntu 16.04 的实例&#xff0c;然后通过创建超级用户并禁用 root 登录来保护服务器&#xff0c;最后配置…

MN316 OpenCPU丨HTTP使用介绍

HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;即超文本传输协议&#xff0c;是一个简单的请求-响应协议&#xff0c;通常运行在TCP之上&#xff0c;它指定了客户端可能发送给服务器消息类型以及得到什么类型响应。HTTPS&#xff08;Hyper Text Transfer Protoc…

Fiddler抓包模拟器(雷电模拟器)

Fiddler设置 List item 打开fiddler,的options 点击OK,重启fiddler 模拟器 更改网络设置 IP可以在电脑上终端上查看 然后在模拟器浏览器中输入IP:端口 安装证书

JVM常见垃圾回收器

串行垃圾回收器 Serial和Serial Old串行垃圾回收器&#xff0c;是指使用单线程进行垃圾回收&#xff0c;堆内存较小&#xff0c;适合个人电脑 Serial作用于新生代&#xff0c;采用复制算法 Serial Old作用于老年代&#xff0c;采用标记-整理算法 垃圾回收时&#xff0c;只有…

django与数据库交互关于当前时间的坑

背景 在线上服务中使用时间进行数据库操作时发现异常&#xff0c;而在本地环境无法成功复现此问题&#xff0c;导致难以进行故障排查。 核心问题 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…

【UE 材质】任务目标点效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 新建一个材质&#xff0c;这里命名为“M_GoalPoint” 打开“M_GoalPoint”&#xff0c;设置混合模式为“半透明”&#xff0c;勾选“双面” 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时效果…

dell服务器重启后显示器黑屏

1.硬件层面&#xff1a;观察主机的指示灯 &#xff08;1&#xff09;指示灯偏黄&#xff0c;硬件存在问题&#xff08;内存条有静电&#xff0c;拔出后用橡皮擦擦拭&#xff1b;或GPU松动&#xff09; a.电源指示灯黄&#xff0c;闪烁三下再闪烁一下&#xff0c;扣下主板上的纽…

解决firefox(火狐)浏览器使用transform: scale导致的border不显示或显示不全的问题;

最近火狐遇到了此问题&#xff0c;查了许久没有解决办法也有说是因为火狐不支持小于1px单位的&#xff0c;也有说火狐浏览器本身的问题&#xff0c;然后也没有解决方案&#xff0c;最后没办法只能用最笨的方法解决。。。。 只针对Firefox使用CSS&#xff0c;使用’-moz-documen…

深度学习疲劳检测 驾驶行为检测 - python opencv cnn 计算机竞赛

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

红海云eHR 任意文件上传漏洞复现

0x01 产品简介 红海eHR是大中型企业广泛采用人力资源管理系统。红海云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 红海云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:…

hbuilder + uniapp +vue3 开发微信云小程序

1、创建项目&#xff1a; 2、创建项目完成的默认目录结构&#xff1a; 3、在根目录新建一个文件夹cloudFns&#xff08;文件名字随便&#xff09;&#xff0c;存放云函数源码&#xff1a; 4、修改manifest.json文件&#xff1a;添加 小程序 appid和cloudfunctionRoot&#xff0…

1、关于前端js-ajax绕过

1、Ajax知识 、js--Ajax 传统请求跟js--Ajax请求的差别 在实例中用的上js-ajax的有 表单验证&#xff1a; 在用户填写表单时&#xff0c;可以使用 Ajax 在不刷新页面的情况下验证表单字段&#xff0c;并提供即时反馈。 实时搜索&#xff1a; 在搜索框中输入内容时&#xff0…

【开源】基于Vue+SpringBoot的陕西非物质文化遗产网站

文末获取源码&#xff0c;项目编号&#xff1a; S 065 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S065。} 文末获取源码&#xff0c;项目编号&#xff1a;S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…