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

news2024/9/20 16:37:47

目录

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.star
    starArr.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=10
            for(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.coloradmin.cn/o/1995626.html

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

相关文章

深度学习基础 - 梯度垂直于等高线的切线

深度学习基础 - 梯度垂直于等高线的切线 flyfish 梯度 给定一个标量函数 f ( x , y ) f(x, y) f(x,y)&#xff0c;它的梯度&#xff08;gradient&#xff09;是一个向量&#xff0c;表示为 ∇ f ( x , y ) \nabla f(x, y) ∇f(x,y)&#xff0c;定义为&#xff1a; ∇ f ( x…

单片机GPIO模式和应用

Push pull 推挽输出 定义&#xff1a;推挽输出是一种输出模式&#xff0c;其中引脚可以输出高电平或低电平&#xff0c;且两种电平状态下都具有较强的驱动能力。 特点&#xff1a; 无论输出高电平还是低电平&#xff0c;都有较强的电流驱动能力。 适用于驱动外部数字电路…

宝塔面板启用 QUIC 与 Brotli 的完整教程

环境 系统&#xff1a;Ubuntu 22.04.4 LTS x86_64 宝塔版本&#xff1a;7.7.0 (可使用本博客提供的一键安装优化脚本) nginx版本&#xff1a;1.26.1 开放UDP端口 注意&#xff1a;在你的服务器商家那里也要开放443 udp端口 sudo ufw allow 443/udp然后重新加载 UFW 以使新…

【漏洞复现】maxView Storage Manager 远程代码执行漏洞

maxView Storage Manager使查看、监控和配置系统中基于Microsemi RAID适配器构建的所有存储变得简单。⽅便的图形⽤户界⾯&#xff08;GUI&#xff09;在Microsemi产品线和⽀持的操作系统&#xff08;包括 Windows、Linux、VMWare和Solaris&#xff09;中的外观和操作都相同。使…

多线程编译

多线程与多进程一样&#xff0c;为了能同时执行多个任务 区别 多进程 创建子进程&#xff0c;子进程会拷贝父进程的数据段的所有内存 进程是资源的获取单位 每个进程完全独立运行 更加关注两个进程之间的通信问题 多线程 线程是进程的最小组成单位&#xff0c;每个进程…

代码随想录算法训练营Day32 | 56. 合并区间 | 738.单调递增的数字 | 968.监控二叉树

今日任务 56. 合并区间 题目链接&#xff1a; https://leetcode.cn/problems/merge-intervals/题目描述&#xff1a; Code class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {ranges::sort(intervals, [&…

Spring:springboot集成jetcache循环依赖问题

springboot版本&#xff1a;2.6.14 jetcache版本&#xff1a;2.6.2 启动项目报错如下&#xff1a; 解决方案&#xff1a; jetcache版本升级到2.6.4 https://github.com/alibaba/jetcache/issues/624

IT运维岗适用的6本证书

作为IT从业人员&#xff0c;不断提升自身的专业技能和知识是提升职场竞争力、助力升职加薪的重要途径。特别是在运维领域&#xff0c;虽然工作看似简单&#xff0c;但实际上需要掌握的技术知识却相当全面。为了全面提升自己的技术能力&#xff0c;并证明自己的专业能力&#xf…

每周心赏|七夕这样玩也太超前了吧,速来AI一下!

明天就是七夕节了&#xff0c;是时候给七夕节来点大震撼了&#xff0c;AI带你玩点不一样的&#xff01; 给大家挖掘了几个有梗又有爱的智能体。信我&#xff0c;快来试玩&#xff01; 不知道大家是什么人&#xff1f;反正&#xff0c;我是一个很爱测评的人&#x1f92d;&#…

【GaussDB(DWS)】数仓部署架构与物理结构分析

数仓架构与物理结构分析 一、部署架构二、物理结构三、测试验证 一、部署架构 华为数据仓库服务DWS&#xff0c;集群版本8.1.3.x 集群拓扑结构&#xff1a; 上述拓扑结构为DWS单AZ高可靠部署架构&#xff0c;为减少硬件故障对系统可用性的影响&#xff0c;建议集群部署方案遵…

制造企业技术图纸不受控的影响与规避方法

在制造企业中&#xff0c;技术图纸是产品设计、制造与检验的核心依据。若技术图纸不受控&#xff0c;将对企业造成诸多不利影响。 首先&#xff0c;产品质量无法得到保障。不受控的图纸可能存在设计缺陷、尺寸误差或工艺不合理等问题&#xff0c;导致生产出的产品不合格&#…

独辟蹊径:用Python打造你的副业帝国,迈向财富自由

在当今这个数字化时代&#xff0c;掌握一门编程语言如同拥有了一把开启无限可能的钥匙。Python&#xff0c;以其简洁的语法、强大的库支持和广泛的应用领域&#xff0c;成为了许多人实现副业收入乃至财富自由的首选工具。本文将探讨如何利用Python技能开启副业&#xff0c;并逐…

mysql中的表查询操作

performance_schema 系统数据库用于收集Mysql服务器的性能参数&#xff0c;以便数据库管理员了解产生性能瓶颈的原因。information_schema 系统数据库定义了所有数据库对象的元数据信息。 表的常规操作&#xff08;增删改查&#xff09; 我们经常对表进行以下操作 插入&#x…

OceanMind海睿思受邀参加第41届CCF中国数据库学术会议

CCF 中国数据库学术会议始于1977年&#xff0c;是由数据库专业委员会举办的中国数据库领域的最高学术会议&#xff0c;第41届中国数据库学术会议&#xff08;NDBC 2024&#xff09;将于2024年8月7日-8月10日在新疆乌鲁木齐举行。中新赛克副总兼大数据产品线总经理卢云川先生受邀…

匹配格值的前半部分

Excel有多列含空格的源数据&#xff0c;如C3:D19&#xff1b;还有若干用于比较的数据项&#xff0c;由"-"隔为前后两部分&#xff0c;如F3:F7。 要求用源数据的每列与数据项的前半部分进行比较&#xff0c;将匹配上的数据项填在该列下面。 使用 SPL XLL spl("d…

DALL•E 3 重新定义图像生成的人工智能

在人工智能的不断发展中&#xff0c;图像生成技术一直是一个备受关注的领域。OpenAI 的 DALL-E 系列自发布以来&#xff0c;便因其卓越的图像生成能力而备受瞩目。作为这一系列的最新成员&#xff0c;DALL-E 3 再次突破了技术的界限&#xff0c;为图像生成带来了全新的可能性。…

嵌入式day23

实现minishell minishell功能&#xff1a; 1,cp 复制文件 cp 1 2 把文件1复制成文件2 2,cat 查看文件 cat 1 查看文件到内容 3,cd 切换路径 cd 1 切换到目录1中 4,ls 查看当前目录下到文件 ls 或 ls /home 5,ll 查看当前目录下到文件 ll 或 ll /home 6,ln -s 创建软链接…

《加密与解密 》第四版读书笔记2

1、注入技术 1.1注入技术的背景 在Windows操作系统中&#xff0c;各个进程的内存空间是相互独立的&#xff0c;虽然能通过函数VirtualQueryEx/VirtualProtectEx查询、设置目标进程的内存信息和页属性&#xff0c;通过函数ReadProcessMemory/WriteProcessMemory对目标进程的内存…

第八天 排行榜功能

排行榜分析&#xff1a; 榜单分为两类&#xff1a; 实时榜单&#xff1a;也就是本赛季的榜单 历史榜单&#xff1a;也就是历史赛季的榜单 之前一个积分记录明细表 要知道&#xff0c;每个用户都可能会有数十甚至上百条积分记录&#xff0c;当用户规模达到百万规模&#xff…

C#调用c++的dll方法,动态调用c++dll的方法

文章目录 一、创建c的dll1.新建项目2.删除vs自建的.cpp和.h文件3.新建Algorithm.h和Algorithm.cpp4.编译c1.编译2.解决报错3.再次编译可以看到已经成功。4.查看成功输出的dll。 二、创建c#项目1.创建一个console控制台程序。2.把dll拷贝到c#生成的程序根目录。3.在c#的program.…