首页 > 其他分享 >js 实现代码雨效果

js 实现代码雨效果

时间:2024-08-23 12:04:41浏览次数:9  
标签:const 效果 代码 random ctx js startH str Math

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta
    name="viewport"
    content="width=device-width, initial-scale=1.0"
  >
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    canvas {
      width: 100%;
      height: 100vh;
      display: block;
      background-color: #000;
    }
  </style>
</head>

<body>
  <canvas
    width="1920"
    height="920"
  ></canvas>

  <script>
    const cvs = document.querySelector('canvas');
    const ctx = cvs.getContext('2d');
    const w = cvs.width;
    const h = cvs.height;
    const str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    const randomStr = () => str[Math.floor(Math.random() * str.length)]
    const randomColor = () => `rgb(${Math.floor(Math.random() * 256)},${Math.floor(Math.random() * 256)},${Math.floor(Math.random() * 256)})`
    const fontW = 28;
    const fontH = 28;
    const columns = Math.ceil(w / fontW);
    const rows = Math.ceil(h / fontH);
    const startH = Array.from({ length: columns }, () => parseInt(Math.random() * 30) - 15);
    ctx.textAlign = 'left'
    ctx.textBaseline = 'top'

    function draw() {
      ctx.fillStyle = 'rgba(0,0,0,0.04)';
      ctx.fillRect(0, 0, w, h);
      for (let i = 0; i < columns; i++) {
        const c = randomColor()
        const str = randomStr();
        const color = c;
        const x = i * fontW;
        const y = startH[i] * fontH;
        ctx.fillStyle = color;
        ctx.font = `${fontH - 4}px Arial`;
        ctx.fillText(str, x, y);
        if (startH[i] > rows) {
          startH[i] = 0 - parseInt(Math.random() * 15);
        } else {
          startH[i] += 1;
        }
      }
    }

    function startDraw() {
      draw()
      setTimeout(startDraw, 50);
    }

    startDraw()
  </script>
</body>

</html>

 

标签:const,效果,代码,random,ctx,js,startH,str,Math
From: https://www.cnblogs.com/fmg0224/p/18375736

相关文章

  • 代码随想录day 38 || 322 零钱兑换,279 完全平方数,139 单词拆分
    322零钱找还funccoinChange(coins[]int,amountint)int{ //装满,并且硬币无限,可以类比完全背包问题 //dp[i][j]表示前i个物品装满容量为j的背包所需要的最少物品数量 //递推公式dp[i][j]=min(dp[i-1][j],dp[i][j-w(i)]+1)//不装物品i的物品数量,装物品i的物品数......
  • vue3实现拖拽效果 (vuedraggable)
    效果图使用vuedraggable实现拖拽真的是特别丝滑和简单!!下载这里是vue3版本的对应vuedraggable版本4.1.0不要下错了!!!npminstallvuedraggable@4pnpmaddvuedraggable@4官网https://github.com/SortableJS/Vue.Draggable中文网https://www.itxst.com/vue-dragg......
  • Simulink自动生成Park变换模块的C代码过程
    Simulink自动生成Park变换模块的C代码过程第一步:在matlab当前文件夹下,建立simulink模型文件。如下图所示。 第二步:搭建park函数模块。在Simscape工具箱中的transformers子工具箱下找到相应的模块,添加输入输出端口。 第三步:代码生成环境配置。(1)点击modelconfigur......
  • Robot Operating System——使用VSCode调试ROS2代码
    大纲安装插件/组件VSCode插件调试组件自定义cmake命令配置CMakeTools新增CMakePresets.json修改默认的cmake编译Debug版配置测试环境启动测试总结参考资料工欲善其事必先利其器。直接使用GDB调试代码毕竟不是很方便,我们将探索如何使用VSCode调试ROS2的代码。我们......
  • Python3测试mysql插入数据代码(chatgpt生成)
      实现的功能:先连接mysql数据库,然后读取某个目录所有以txt文件命名后缀的json内容文件,解析出对应的key和value,然后插入数据到mysql数据库,最后关闭数据库连接 importosimportjsonimportpymysqlimportre"""尝试插入json文件到MySQL数据库。dbInfo:MySQL数据库......
  • 利用源生成器,在编译阶段生成映射代码,减少运行时反射
    利用源生成器,在编译阶段生成映射代码,减少运行时反射这里有一个Product类和ProductDto类,实现对象自身的拷贝,或者Product映射ProductDtoGenMapperAttribute标注了类型需要生成映射方法,同时要求实现IAutoMap接口(由生成器自动实现)构造函数可选参数为目标类型,默认是自身MaoToAttr......
  • 十五分钟两百行代码,手写一个vue项目全局通用的弹框
    前言:我们在写vue项目时,弹框是非常常用的组件,并且在同一个项目中,弹框大多类似。所以我们可以抽离封装出一个通用的弹框;因为vue3可向下兼容,所以作者这边会使用vue2的写法,vue3写法大同小异。第一步:新建相关文件一般来说是在src/components/dialog下新建如下两个文件:index.vue:该......
  • js逆向学习
    目前本人大三下,想要学习js逆向同学的可以联系我:[email protected]上面是本人做的一些比较复杂的项目,还有很多简单的项目,这里给出图片。还有一些简单的js逆向。教你各种补充环境,各种js算法,教你各种底层的js库,webpack打包,bable的es6转es6原理,异步转同步代码之后如何代码定......
  • python 05-标准库:csv、json、sqlite3、datetime模块
    csv模块importcsv#data.csv不存在时,会现在当前目录下创建一个data.csv文件withopen("data.csv","w",encoding='utf-8')asfile:writer=csv.writer(file)writer.writerow(["trasanction_id","product_id","pric......
  • 边缘发光效果
    前言时隔半年再来写shader发现好多东西都忘光了,最近刷短视频看见一个帅气的边缘发光效果,于是想自己也学着写一个,遂找博客学习。发现大佬用的是表面着色器的写法,于是狠狠的恶补了一波表面着色器表面着色器可以看成是顶点片元着色器的一种抽象。可以更加方便的编写shader,不用再繁......