当前位置: 首页 > news >正文

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

目录

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雪花

<!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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MyBatis Plus 会在执行 SQL 查询时自动应用拦截器链,包括分页拦截器,从而简化分页逻辑的处理
  • C语言常用的字符串函数(含模拟实现)
  • 【书生大模型实战营(暑假场)】基础任务一 书生大模型全链路开源体系
  • vue中post请求返回二进制流文件下载
  • (回溯) LeetCode 131. 分割回文串
  • 【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题
  • 图像的特征提取
  • 树莓派4/5:运行Yolov5n模型(文末附镜像文件)
  • LVS实验——部署DR模式集群
  • VSCODE platformio ESP32-S3 内置 JTAG 接口断点单步调试笔记
  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • 常见硬件工程师面试题(四)
  • 自动化测试 — selenium + Java
  • Docker最佳实践(四):安装redis
  • IDEA彻底卸载以及安装总结
  • 【5+】跨webview多页面 触发事件(二)
  • Android开源项目规范总结
  • iOS | NSProxy
  • Python学习之路16-使用API
  • sessionStorage和localStorage
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue 动态创建 component
  • Web标准制定过程
  • 测试开发系类之接口自动化测试
  • 翻译:Hystrix - How To Use
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 利用jquery编写加法运算验证码
  • 区块链将重新定义世界
  • 算法-插入排序
  • 微信小程序实战练习(仿五洲到家微信版)
  • 仓管云——企业云erp功能有哪些?
  • 大数据全解:定义、价值及挑战
  • 数据可视化之下发图实践
  • ​​​【收录 Hello 算法】9.4 小结
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)字符分类函数
  • (LeetCode) T14. Longest Common Prefix
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (笔试题)分解质因式
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二十三)Flask之高频面试点
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (一)、python程序--模拟电脑鼠走迷宫
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)iOS字体
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (自用)交互协议设计——protobuf序列化
  • .CSS-hover 的解释
  • .NET Core中Emit的使用
  • .net 设置默认首页
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...