數字雨動畫背景

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>數字雨動畫背景</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {background-color: #000;color: #0f0;font-family: 'Courier New', monospace;overflow: hidden;height: 100vh;display: flex;flex-direction: column;justify-content: center;align-items: center;position: relative;}canvas {position: absolute;top: 0;left: 0;z-index: -1;}.content {text-align: center;z-index: 1;padding: 20px;background: rgba(0, 20, 0, 0.7);border-radius: 10px;max-width: 80%;backdrop-filter: blur(5px);border: 1px solid rgba(0, 255, 0, 0.3);box-shadow: 0 0 20px rgba(0, 255, 0, 0.3);}h1 {font-size: 2.8rem;margin-bottom: 20px;text-shadow: 0 0 10px #0f0;letter-spacing: 3px;}p {font-size: 1.2rem;margin-bottom: 20px;line-height: 1.6;}.controls {display: flex;gap: 15px;justify-content: center;margin-top: 20px;flex-wrap: wrap;}button {background: rgba(0, 30, 0, 0.8);color: #0f0;border: 1px solid #0f0;padding: 10px 20px;font-size: 1rem;cursor: pointer;transition: all 0.3s;font-family: 'Courier New', monospace;border-radius: 5px;}button:hover {background: rgba(0, 100, 0, 0.8);box-shadow: 0 0 15px rgba(0, 255, 0, 0.7);transform: translateY(-2px);}.stats {position: absolute;bottom: 20px;right: 20px;background: rgba(0, 20, 0, 0.6);padding: 10px 15px;border-radius: 5px;border: 1px solid rgba(0, 255, 0, 0.3);}.footer {position: absolute;bottom: 20px;color: #0a0;font-size: 0.9rem;}@media (max-width: 768px) {h1 {font-size: 2rem;}p {font-size: 1rem;}.content {max-width: 95%;}}</style>
</head>
<body><canvas id="matrixCanvas"></canvas><div class="content"><h1>數字矩陣</h1><p>0和1組成的數字雨從上向下流動,形成科幻感十足的數字矩陣背景</p><p>點擊屏幕任意位置可創建數字漣漪效果</p><div class="controls"><button id="speedUp">加速</button><button id="speedDown">減速</button><button id="densityUp">增加密度</button><button id="densityDown">減少密度</button><button id="toggleTheme">切換主題</button></div></div><div class="stats"><span id="fpsCounter">FPS: 60</span> | <span id="dropsCounter">數字雨滴: 150</span></div><div class="footer">Matrix Digital Rain Animation</div><script>const canvas = document.getElementById('matrixCanvas');const ctx = canvas.getContext('2d');// 設置canvas大小為窗口大小canvas.width = window.innerWidth;canvas.height = window.innerHeight;// 數字字符集const chars = '010101';// 字體大小const fontSize = 14;// 列數(根據字體大小計算)const columns = canvas.width / fontSize;// 雨滴數組 - 每列一個雨滴let drops = [];// 初始化雨滴位置for(let i = 0; i < columns; i++) {drops[i] = Math.floor(Math.random() * canvas.height / fontSize);}// 動畫參數let speed = 5;let density = 2;let colorTheme = 'green';let lastTime = 0;let fps = 0;let frameCount = 0;let startTime = Date.now();let rippleEffect = null;// 繪制函數function draw() {// 半透明黑色背景 - 實現拖尾效果ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';ctx.fillRect(0, 0, canvas.width, canvas.height);// 設置字體ctx.font = `${fontSize}px monospace`;// 繪制雨滴for(let i = 0; i < columns; i++) {if(i % density !== 0) continue;// 隨機字符const char = chars[Math.floor(Math.random() * chars.length)];// 設置顏色 - 根據位置漸變const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);if(colorTheme === 'green') {gradient.addColorStop(0, '#0f0');gradient.addColorStop(0.5, '#0a0');gradient.addColorStop(1, '#050');} else {gradient.addColorStop(0, '#0af');gradient.addColorStop(0.5, '#08a');gradient.addColorStop(1, '#035');}ctx.fillStyle = gradient;// 繪制字符const x = i * fontSize;const y = drops[i] * fontSize;ctx.fillText(char, x, y);// 重置超出屏幕的雨滴if(y > canvas.height && Math.random() > 0.975) {drops[i] = 0;}// 移動雨滴drops[i] += speed / 10;}// 繪制漣漪效果if(rippleEffect) {const {x, y, radius, maxRadius} = rippleEffect;const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius);gradient.addColorStop(0, 'rgba(0, 255, 0, 0.8)');gradient.addColorStop(1, 'rgba(0, 255, 0, 0)');ctx.fillStyle = gradient;ctx.beginPath();ctx.arc(x, y, radius, 0, Math.PI * 2);ctx.fill();rippleEffect.radius += 2;if(rippleEffect.radius > maxRadius) {rippleEffect = null;}}// 更新幀率計數frameCount++;const now = Date.now();if(now - startTime >= 1000) {fps = frameCount;frameCount = 0;startTime = now;document.getElementById('fpsCounter').textContent = `FPS: ${fps}`;document.getElementById('dropsCounter').textContent = `數字雨滴: ${Math.floor(columns / density)}`;}}// 動畫循環function animate() {draw();requestAnimationFrame(animate);}// 啟動動畫animate();// 窗口大小調整處理window.addEventListener('resize', () => {canvas.width = window.innerWidth;canvas.height = window.innerHeight;// 重新初始化雨滴drops = [];for(let i = 0; i < columns; i++) {drops[i] = Math.floor(Math.random() * canvas.height / fontSize);}});// 添加鼠標點擊漣漪效果canvas.addEventListener('click', (e) => {rippleEffect = {x: e.clientX,y: e.clientY,radius: 5,maxRadius: 100};});// 控制按鈕事件document.getElementById('speedUp').addEventListener('click', () => {speed = Math.min(speed + 1, 20);});document.getElementById('speedDown').addEventListener('click', () => {speed = Math.max(speed - 1, 1);});document.getElementById('densityUp').addEventListener('click', () => {density = Math.max(density - 0.5, 1);});document.getElementById('densityDown').addEventListener('click', () => {density = Math.min(density + 0.5, 10);});document.getElementById('toggleTheme').addEventListener('click', () => {colorTheme = colorTheme === 'green' ? 'blue' : 'green';});</script>
</body>
</html>

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912678.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912678.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912678.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式鎖的概念與應用場景

一、分布式鎖的核心概念 分布式鎖是一種在分布式系統環境下&#xff0c;用于保證多個進程/節點對共享資源實現互斥訪問的機制。其本質是通過某種中間件&#xff08;如Redis、ZooKeeper等&#xff09;實現跨節點的鎖控制&#xff0c;確保在分布式環境中&#xff0c;同一時刻只有…

js代碼09

題目 好的&#xff0c;我們繼續。 在上一個練習中&#xff0c;我們深入探討了 this 的復雜性。你會發現&#xff0c;ES6 引入的 class 語法在很大程度上就是為了簡化 this 的使用&#xff0c;并為 JavaScript 提供一個更清晰、更熟悉的面向對象編程&#xff08;OOP&#xff0…

基于Airtest的App數據爬取實戰:突破傳統爬蟲的邊界

引言:App數據爬取的技術困境 在當今移動優先的時代,App已成為企業核心數據載體,然而??傳統爬蟲技術??在App數據獲取上面臨三大難題: ??協議層屏障??:加密HTTPS、SSL Pinning等技術阻斷中間人攻擊??渲染層障礙??:React Native、Flutter等跨平臺框架使DOM解析…

【LeetCode 熱題 100】560. 和為 K 的子數組——(解法一)前綴和+暴力

Problem: 560. 和為 K 的子數組 題目&#xff1a;給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。子數組是數組中元素的連續非空序列。 【LeetCode 熱題 100】560. 和為 K 的子數組——&#xff08;解法二&#xff09;前綴和…

android車載開發之HVAC

目前主要在做車載hvac的開發&#xff0c;主要的一些功能主要是hvac&#xff0c;座椅&#xff0c;香氛&#xff0c;設置等的一些模塊&#xff0c;具體模塊下&#xff0c;比如 1.空調 ac&#xff0c;智能模式&#xff08;極速降溫&#xff0c;極速采暖&#xff0c;智能除味&…

深度學習 Diffusers 庫(自留)

&#xff08;本文將圍繞 安裝Diffusers庫及其依賴、理解Diffusers核心概念&#xff1a;Pipeline, Model, Scheduler 、使用預訓練模型進行推理&#xff08;文生圖、圖生圖等&#xff09; 、 自定義模型和調度器 、訓練自己的擴散模型&#xff08;可選&#xff0c;需要大量資源&…

【VPC技術】基礎理論篇

文章目錄 概述相關基礎核心知識軟件定義網絡SDNOverlay 技術 安全組概述 參考博客 &#x1f60a;點此到文末驚喜?? 概述 相關基礎 基本概念 虛擬私有云VPC&#xff1a;是一個隔離的網絡環境&#xff0c;每個VPC擁有專屬的IP地址范圍&#xff08;CIDR&#xff09;、路由表、…

在 RK3588 Ubuntu 上編譯 eglinfo:全流程實戰 + 常見報錯修復

dv1/eglinfo 是一個開源的 EGL 信息檢測工具&#xff0c;廣泛用于 OpenGL ES 圖形棧調試、驅動驗證和嵌入式平臺圖形支持排查。在 Rockchip RK3588 上編譯該工具可以協助我們確認 EGL DRM 是否配置正確&#xff0c;尤其在無窗口系統&#xff08;如 eglfs、framebuffer&#xf…

開源推薦:基于前后端分離架構的WMS倉儲管理系統

開源推薦&#xff1a;基于前后端分離架構的WMS倉儲管理系統 &#x1f525; 在線演示地址&#xff1a;https://tob.toolxq.com/wms/wms.html 點擊上方鏈接可直接體驗系統功能和界面&#xff0c;無需安裝部署 前言 在企業數字化轉型的浪潮中&#xff0c;倉儲管理系統&#xff08…

Redis中List類型常見的操作命令有哪些?

Redis中List類型是一個字符串列表&#xff0c;這里是一些常見的命令&#xff1a; 1&#xff09;lpush:將一個或多個值插入到列表頭部。列表不存在&#xff0c;一個新的列表會被創建。 2&#xff09;rpush:將一個或多個值插入到列表尾部。 3&#xff09;lpop:移除并返回列表頭…

mac重復文件清理,攝影師同款清理方案

攝影師小林盯著屏幕上的警告&#xff1a;“存儲空間不足”&#xff0c;離截稿只剩3小時。她的MacBook如同塞滿回憶的閣樓&#xff0c;128GB的“其他”空間神秘消失。翻看照片庫時&#xff0c;她驚訝地發現——同一組西藏雪山照片竟有十幾個副本&#xff01;這是mac重復文件問題…

lua腳本為什么能保證原子性

Redis 處理客戶端請求是基于單線程模型的&#xff08; Redis 6.0 開始引入了多線程處理網絡 IO&#xff0c;但命令執行仍然是單線程的&#xff09;。這意味著&#xff0c;在任意時刻 Redis 只會執行一個命令或腳本。這種單線程特性確保了當 Redis 在執行一個 Lua 腳本時&#x…

爬蟲詳解:Aipy打造自動抓取代理工具

一、爬蟲的本質與核心功能 爬蟲是一種通過編寫程序自動抓取互聯網公開數據的技術工具&#xff0c;其核心流程包括&#xff1a; 模擬瀏覽器行為&#xff1a;發送 HTTP 請求訪問目標網頁解析頁面結構&#xff1a;提取 HTML/XML 中的關鍵信息&#xff08;如文本、鏈接、圖片&…

Leetcode百題斬-棧

終于來到了棧專題&#xff0c;想想之前來阿里的時候就是面試了一道棧最終通過了終面&#xff0c;也是十分懷念了。 739. Daily Temperatures[Medium] 思路&#xff1a;這就是最典型的單調棧問題了。從后向前維護下一個更大值或者下一個更大值的位置。 可以看一下當年面阿里時…

PIXHAWK(ardupilot4.52)NMEA的解析bug

最近在測試過程中發現在橢球高為負的地方&#xff0c;地面站讀取GPS_RAW_INT (24)消息中的alt高度竟然是正值。而消息中定義的alt并不是一個unsigned數據&#xff0c;理論上是帶有正負符號的。 查看gga的原始信息&#xff1a; $GPGGA,063718.40,3714.8533856,N,11845.9411766,…

Linux容器講解以及對應軟件使用

一、容器基礎知識講解 1.1 微服務的部署策略 部署單體應用意味著運行大型應用的多個相同副本&#xff0c;通常提供若干臺&#xff08;N&#xff09;服務器&#xff08;物理機或虛擬 機&#xff09;&#xff0c;在每臺服務器上運行若干個&#xff08;M&#xff09;應用實例。部…

企業級應用技術-ELK日志分析系統

目錄 #1.1ELK平臺介紹 1.1.1ELK概述 1.1.2Elasticsearch 1.1.3Logstash 1.1.4Kibana #2.1部署ES群集 2.1.1基本配置 2.1.2安裝Elasticsearch 2.1.3安裝Logstash 2.1.4Filebeat 2.1.5安裝Kibana 1.1ELK平臺介紹 1.1.1ELK概述 ELK 是三個開源工具的縮寫&#xff0c;分別是Elas…

Shiro漏洞復現

Shiro簡介 Apache Shiro是一種功能強大且易于使用的Java安全框架&#xff0c;它執行身份驗證、授權、 加密和會話管理&#xff0c;可用于保護任何應用程序的安全。 Shiro提供了應用程序安全性API來執行以下方面&#xff1a; 1.身份驗證&#xff1a;證明用戶身份&#xff0c;通…

VSCode 中使用 Google Test(GTest)框架測試

VSCode 中使用 Google Test&#xff08;GTest&#xff09;框架在 VSCode 中對 C 代碼進行測試的示例&#xff1a; 一、Unbutu x86使用gtest 環境配置 安裝 GTest &#xff1a;在 Ubuntu 系統中&#xff0c;可以通過命令sudo apt-get install libgtest-dev安裝 GTest 庫。對于…

【1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫】

1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫 &#x1f3af; 學習目標 掌握數據庫表結構設計原則理解字段類型選擇與優化學會雪花算法ID生成策略掌握索引設計與優化技巧了解分庫分表設計方案 &#x1f4d6; 故事開始 小明: “老王&#xff0c;我總是不知道怎么設計數…