前端已经学会vue,做粒子效果

news/2024/9/17 6:57:19/ 标签: 前端, vue.js, javascript

目录

1. Canvas API

2. WebGL

3. 粒子系统

4. 动画与性能优化

5. 现有库和框架

6. Vue 组件和状态管理

实践项目建议

案例1

案例2雪花


已经熟悉了 Vue、TypeScript 和 JavaScript,下面是一些你可以学习的内容,以帮助你实现粒子效果的界面:

1. Canvas API

  • 学习内容:了解如何使用 Canvas API 进行 2D 图形绘制。掌握如何绘制形状、处理图像、以及在 Canvas 上执行动画。
  • 参考资源:MDN Web Docs 上的 Canvas API 文档。

2. WebGL

  • 学习内容:WebGL 允许你在浏览器中绘制 3D 图形。你可以使用它来创建更复杂的粒子效果。了解基本的 WebGL 操作、着色器编程(GLSL)、和渲染管线。
  • 参考资源:MDN Web Docs 上的 WebGL 文档 和《WebGL 编程指南》。

3. 粒子系统

  • 学习内容:研究如何实现粒子系统,包括粒子的生成、生命周期管理、运动和碰撞检测。了解常用的粒子系统设计模式和优化技巧。
  • 参考资源:可以参考有关粒子系统的教程或文章,如 Particle Systems for Game Programmers 。

4. 动画与性能优化

  • 学习内容:掌握如何使用 requestAnimationFrame 进行流畅的动画,以及如何优化动画性能,特别是当处理大量粒子时。
  • 参考资源:MDN Web Docs 上的 requestAnimationFrame 文档和有关性能优化的最佳实践。

5. 现有库和框架

  • 学习内容:了解一些流行的粒子效果库,这些库可以简化你的开发工作。例如,three.js(一个基于 WebGL 的 3D 渲染库)或 particles.js(一个轻量级的粒子系统库)。
  • 参考资源
    • Three.js 文档
    • Particles.js GitHub 页面

6. Vue 组件和状态管理

  • 学习内容:了解如何将粒子效果集成到 Vue 组件中。研究如何使用 Vue 的生命周期钩子来初始化和更新粒子效果,并与 Vue 的状态管理工具(如 Vuex)配合使用。
  • 参考资源:Vue 的官方文档和一些示例项目可以提供有用的指导。

实践项目建议

  • 小项目:创建一个简单的粒子效果(如烟雾或雨滴),以测试和巩固你的知识。
  • 集成到 Vue 应用:将粒子效果集成到一个 Vue 应用中,作为一个组件来进行展示和交互。

这些学习内容将帮助你有效地实现粒子效果,并将其整合到你的 Vue 项目中。

案例1移动星空

效果:

<template><div class="about"><div class="stars"><div  v-for="(item,index) in starsCount" :key="index" class="star" ref="star"></div></div><div style="background-color: #f7f7b6;margin-top: 20px;width: 100px">这里方自己写的东西</div></div></template>
<script>
export  default {data(){return{starsCount:1000,//星星数量distance:800//间距}},mounted(){let starArr = this.$refs.starstarArr.forEach(item => {var speed = 0.2 + (Math.random() * 1);var thisDistance = this.distance + (Math.random() * 300);item.style.transformOrigin = `0 0 ${thisDistance}px`;item.style.transform = `
translate3d(0,0,-${thisDistance}px)
rotateY(${Math.random() * 360}deg)
rotateX(${Math.random() * -50}deg)
scale(${speed},${speed})`;})}}</script>
<style>
.about {margin: 0px; /*// 去除外边距*/width: 100%; /*// 宽度占满容器*/height: 100vh; /*// 高度占满视窗高度*/background: radial-gradient(200% 100% at bottom center, #f7f7b6, #e96f92,#1b2947);/* 第一个渐变背景,200% 100%定义了椭圆形状,起点在容器底部中心 */background: radial-gradient(220% 105% at top center, #1b2947 10%,#75517d 40%,#e96f92 ,#f7f7b6);/* 第二个渐变背景覆盖第一个,从顶部中心开始,不同颜色在不同位置 */background-attachment: fixed; /*// 背景固定,滚动时背景不动*/overflow: hidden;/* // 隐藏超出容器部分的内容*/
}@keyframes rotate {0% { transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(0); }100% { transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg); }/* 定义了一个名为rotate的动画,从0%到100%完成一周的Y轴旋转 */
}
.stars {transform: perspective(500px); /*// 设置3D透视点*/transform-style: preserve-3d; /*// 保持子元素的3D位置*/position: absolute; /*// 绝对定位*/perspective-origin: 50% 100%;/* // 透视原点位于容器的底部中心*/left: 50%; /*// 水平居中*/animation: rotate 200s infinite linear;/* // 应用rotate动画,无限循环,持续90秒,速度均匀*/
bottom: 0;
}
.star {width: 4px; /*// 宽度为2像素*/height: 4px; /*// 高度为2像素*/background: #f7f7b8; /*// 背景颜色为浅黄色*/position: absolute; /*// 绝对定位*/top: 0; /*// 顶部对齐*/left: 0; /*// 左侧对齐*/backface-visibility: hidden; /*// 背面不可见,用于3D旋转时*/
}
</style>

案例2雪花

xuehua

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>雪花</title><style>*{margin: 0;padding: 0;}body{background-image: url(./images/beijin.png);background-size: cover;}</style>
</head>
<body><canvas></canvas><script>let canvas=document.querySelector('canvas');let context =canvas.getContext('2d');let w=window.innerWidth;let h=window.innerHeight;canvas.width=w;canvas.height=h;let num=200;let snows=[];for(let i=0;i<num;i++){snows.push({x:Math.random()*w,y:Math.random()*h,r:Math.random()*10+1})}
let move=()=>{for(let i=0;i<num;i++){let snow=snows[i];snow.x+=Math.random()*2+1;snow.y+=Math.random()*2+1;if(snow.x>w){snow.x=0}  if(snow.y>h){snow.y=0}}}let draw=()=>{context.clearRect(0,0,w,h);context.beginPath();context.fillStyle='rgb(255,255,255)';context.shadowColor='rgb(255,255,255)';context.shadowBlur=10for(let i=0;i<num;i++){let snow=snows[i];context.moveTo(snow.x,snow.y);context.arc(snow.x,snow.y,snow.r,0,Math.PI*2)}context.fill();context.closePath();move();}setInterval(draw,30)</script>
</body>
</html>


http://www.ppmy.cn/news/1507519.html

相关文章

python async

要使用 Python 的 async 特性编写一个代码&#xff0c;以交替使用两个 AI API 处理数据&#xff0c;您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的&#xff0c;并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…

处理Pandas中的JSON数据:从字符串到结构化分析

在数据科学领域&#xff0c;JSON作为一种灵活的数据交换格式&#xff0c;被广泛应用于存储和传输数据。然而&#xff0c;JSON数据的非结构化特性在进行数据分析时可能会带来一些挑战。本文将指导读者如何使用Pandas库将DataFrame中的JSON字符串列转换为结构化的表格数据&#x…

sql语句+mysql权限

sql语句 1.新增 2.删除 3.修改 4.查询 单表查询 select 字段名列表 from 表名&#xff0c;索引 聚合函数 只有 select ⼦句和 having ⼦句、order by ⼦句中能使⽤聚合函 数&#xff0c;where ⼦句不能使⽤聚合函数。当使⽤聚合查询以后&#xff0c;不能 使⽤where条件&a…

【mysql 第一篇章】系统和数据库的交互方法

一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理&#xff0c;只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解&#xff0c;发现链接数据库是需要有别的工具辅…

乐凡三防平板:制造业移动作业平台的专业高效之选

在制造业数字化转型的浪潮中&#xff0c;移动作业平台成为了提升生产效率、优化管理流程的关键工具。其中&#xff0c;三防平板因其卓越的防护性能和高效的数据处理能力&#xff0c;正逐渐成为制造业移动作业的首选设备。本文将探讨三防平板如何为制造业带来专业高效的移动作业…

全新Bty分销系统源码v1.0/宝塔分销系统开源版源码/独立后台(附安装教程)

源码简介&#xff1a; 全新Bty分销系统源码v1.0&#xff0c;它作为宝塔分销系统开源版源码&#xff0c;功能强大&#xff0c;它内置了易支付功能&#xff0c;方便多了&#xff01; 这个Bty分销系统开源版&#xff0c;宝塔分销系统开源版。它基于宝塔开放的API底层控制器&…

鸿蒙AI功能开发【hiai引擎框架-主体分割】 基础视觉服务

hiai引擎框架-主体分割 介绍 本示例展示了使用hiai引擎框架提供的主体分割能力。 本示例模拟了在应用里&#xff0c;选择一张图片&#xff0c;识别其图片中的显著性主体并展示出来主体的边界框的数据。 需要使用hiai引擎框架通用文字识别接口hms.ai.vision.subjectSegmenta…

Npm使用教程(详细讲解)

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言 npm&#xff08;Node Package Manager&#xff09;是世界上最大的包管理器和软件注册表&#xff0c;专为 Node.js 生态系统设计。它是Node.js 的默认包管理工具&#xff0c;用于管理 JavaScript 项目的依赖项和包的安装、…

R 语言学习教程,从入门到精通,R 数据类型(6)

1、R 数据类型 数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。 变量的类型决定了变量存储占用的空间&#xff0c;以及如何解释存储的位模式。 R 语言中的最基本数据类型主要有三种&#xff1a; 数字 逻辑 文本 数字常量主要有两种&#xff1a; 逻辑类型在许多…

Python知识点:使用Transformers进行预训练语言模型应用

使用Transformers库&#xff08;Hugging Face提供&#xff09;进行预训练语言模型的应用涉及几个步骤&#xff1a;安装库、加载预训练模型、进行文本生成或分类任务。以下是一个详细的示例流程。 安装依赖 首先&#xff0c;确保你安装了Transformers和其他必要的库&#xff1…

从数据分析到智能生产:AI在工业中的应用与未来

导语 | 人工智能技术的迅猛发展&#xff0c;正在引领第四次工业革命悄然而至。尽管 AI 技术在工业领域的部署仍有诸多难题亟待解决&#xff0c;但这并不能阻挡历史趋势的车轮滚滚向前&#xff0c;AI 正在为工业领域带来新的变革。今天&#xff0c;我们特邀了上海腾展长融董事 &…

iOS ------ 事件响应链

响应者链 响应者链是由一系列链接在一起的响应者&#xff08;UIResponser之类&#xff1a;UIApplication&#xff0c;UIViewController&#xff0c;UIView&#xff09;注组成的。一般情况下&#xff0c;一条响应链开始于第一响应者&#xff0c;结束于application对象。如果一个…

【生成式人工智能-七-大型语言模型的可解释性】

大型语言模型的可解释性 语言模型是如何工作的1.把文字变成Token2.将Token表示成向量3.考虑上下文Attention4.编码器和解码器 语言模型无法解释体现在那些方面&#xff1f;语言模型通过什么方法可以获得解释性通过语言模型的神经网络进行分析找出哪些是影响输出的关键输入分析a…

某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC]

文章目录 某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相…

cpp笔记07:STL

STL 基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09; STL从广义上分为&#xff1a;容器&#xff08;container&#xff09;算法&#xff08;algorithm&#xff09;迭代器&#xff08;iterator&#xff09; 容器和算法之间通过迭代器…

Postgresql数据库密码忘记的解决方法

如果你忘记了PostgreSQL数据库的密码&#xff0c;可以通过以下方法重置密码&#xff1a; 方法一&#xff1a;修改 pg_hba.conf 文件 找到 pg_hba.conf 文件&#xff1a; 这个文件通常位于 PostgreSQL 数据目录中。你可以通过以下命令找到该文件的位置&#xff1a; 复制代码 …

【前端】NodeJS:NodeJS模块化

文章目录 1 NodeJS模块化1.1 模块化与模块1.2 模块化项目1.3 模块化好处 2 模块暴露数据2.1 模块初体验2.2 暴露数据 3 导入&#xff08;引入&#xff09;模块4 导入模块的基本流程5 CommonJS规范 1 NodeJS模块化 1.1 模块化与模块 将一个复杂的程序文件依据一定规则&#xf…

leetcode数论(836. 矩形重叠)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。现阶段开始专项练习。 数论包含最大公约数(>2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。 描述 矩…

RK3399平台开发系列讲解(内核入门篇)module_init 的加载过程

🚀返回专栏总目录 文章目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文要研究的内容为编译进内核的驱动系统是如何运行的? 在驱动程序中,module_init 宏定义了驱动的入口函数,在模块加载时被内核自动调用, 该宏定义在内核源码目录下的“include/linux/…

rabbitmq出现Management API returned status code 500 -

我们在使用rabbitMq点击交换机时会发现提示以下错误&#xff1a; 解决方案&#xff1a; 1、进入容器中 docker exec -it rabbitmq的镜像id /bin/bash2、cd到目录/etc/rabbitmq/conf.d/ cd /etc/rabbitmq/conf.d/ 3、执行该命令 echo management_agent.disable_metrics_co…