HTML流星雨

目錄

寫在前面

完整代碼

代碼分析

系列文章

寫在最后


寫在前面

歲月如梭,光陰似箭,不知不覺暑假就要來嘍,本期小編用HTML給大家手搓了一個炫酷的流星雨動畫,一起來看看吧。

完整代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>流星雨</title><style>body {background-color: black;width: 100%;height: 100%;overflow: hidden;}.star {position: absolute;width: 0;height: 0;opacity: 0.2;border: 2px solid transparent;border-bottom: 4px solid #fff;animation: flash 2s infinite linear;}.star::before {content: "";position: absolute;left: -2px;top: 4px;border: 2px solid transparent;border-top: 4px solid #fff;}@keyframes flash {20% {opacity: 0.2;}40% {opacity: 0.5;}60% {opacity: 1;}80% {opacity: 0.5;}100% {opacity: 0.2;}}
</style>
</head><body><canvas id="Meteor"></canvas><script type="text/javascript">var starCount = 300;var context;function starInit() {var bg = document.querySelector("body");for (var i = 0; i < starCount; i++) {var star = document.createElement("div");star.classList.add("star");bg.appendChild(star);}}function starPosition() {var stars = document.querySelectorAll(".star");for (var i = 0; i < starCount; i++) {stars[i].style.left = Math.random() * window.innerWidth + "px";stars[i].style.top = Math.random() * window.innerHeight + "px";stars[i].style.animationDelay = Math.random() * 10 + "s";}}function init() {var Meteor = document.getElementById("Meteor");Meteor.width = window.innerWidth;Meteor.height = window.innerHeight;context = Meteor.getContext("2d");}function MeteorRain() {this.x = Math.random() * window.innerWidth;this.y = Math.random() * window.innerHeight;this.length = Math.ceil(Math.random() * 80 + 150);this.angle = 30;this.cos = Math.cos((this.angle * 3.14) / 180);this.sin = Math.sin((this.angle * 3.14) / 180);this.width = this.length * this.cos;this.height = this.length * this.sin;this.speed = Math.ceil(Math.random() + 0.5);this.shifting_x = this.speed * this.cos;this.shifting_y = this.speed * this.sin;this.countPos = function () {this.x = this.x - this.shifting_x;this.y = this.y + this.shifting_y;};this.draw = function () {context.save();context.beginPath();context.lineWidth = 1;context.globalAlpha = this.alpha;var line = context.createLinearGradient(this.x,this.y,this.x + this.width,this.y - this.height);line.addColorStop(0, "white");line.addColorStop(0.5, "grey");line.addColorStop(1.0, "black");context.strokeStyle = line;context.moveTo(this.x, this.y);context.lineTo(this.x + this.width, this.y - this.height);context.closePath();context.stroke();context.restore();};this.move = function () {var x = this.x + this.width - this.shifting_x;var y = this.y - this.height + this.shifting_y;context.clearRect(x - 3,y - 3,this.shifting_x + 5,this.shifting_y + 5);this.countPos();this.alpha -= 0.002;this.draw();};}function playRains() {for (var n = 0; n < rainCount; n++) {var rain = rains[n];rain.move();if (rain.y > window.innerHeight) {context.clearRect(rain.x,rain.y - rain.height,rain.width,rain.height)rains[n] = new MeteorRain();}}setTimeout("playRains()", 2);}var rainCount = 20;var rains = new Array();init();starInit();starPosition();for (var i = 0; i < rainCount; i++) {var rain = new MeteorRain();rain.draw();rains.push(rain);}playRains();
</script>
</body></html>

代碼分析

這段代碼創建了一個流星雨動畫,通過HTML、CSS和JavaScript實現。下面是對代碼的詳細分析。

HTML結構

  • <html>,?<head>,?<body>:標準的HTML結構,包含文檔的頭部和主體。

  • <meta charset="UTF-8">:設置字符編碼為UTF-8,并使頁面適應不同設備的寬度。

  • <title>流星雨</title>:設置網頁標題為“流星雨”。

  • <canvas id="Meteor"></canvas>:使用canvas元素繪制流星。

  • <script type="text/javascript">: 包含JavaScript代碼,用于動態創建流星雨效果。

CSS樣式

  • body: 背景色設置為黑色,寬度和高度為100%,隱藏溢出的內容。

  • .star: 定義星星的樣式。星星是絕對定位的,初始寬高為0,透明度為0.2,邊框透明,底部邊框為白色。使用了一個2秒無限循環的閃爍動畫。

  • .star::before: 為星星增加一個小白色部分,進一步增強星星的視覺效果。

  • @keyframes flash: 定義星星的閃爍動畫,透明度在0.2到1之間變化。

JavaScript代碼

  • var starCount = 300;: 定義星星的數量。

  • var context;: 全局變量,用于存儲canvas的上下文。

starInit函數
  • starInit(): 初始化星星,向body中添加300個.star元素。

starPosition函數
  • starPosition(): 設置每個星星的位置和動畫延遲,使它們在頁面上的位置和閃爍時間隨機化。

init函數
  • init(): 初始化canvas的寬度和高度,并獲取其2D繪圖上下文。

MeteorRain函數
  • MeteorRain(): 構造函數,用于創建一個流星。每個流星有隨機的起始位置、長度、角度和速度。計算流星的寬度和高度,以及移動時的水平和垂直位移。

  • countPos(): 更新流星的位置,使其沿對角線移動。

  • draw(): 繪制流星。使用線性漸變顏色,使流星從白色到灰色到黑色漸變。

  • move(): 移動流星,并清除它之前的位置,使動畫流暢。流星移動后透明度逐漸降低,重新繪制流星。

playRains函數
  • playRains(): 控制所有流星的移動。如果流星超出屏幕,則重新生成一個新的流星。通過setTimeout實現循環調用,以保持動畫持續。

主程序

  • 初始化canvas和星星的位置。

  • 創建20個流星對象,并繪制初始狀態。

  • 啟動流星雨動畫,通過反復調用playRains函數實現流星的連續移動。

整體功能

這段代碼通過結合CSS和JavaScript,實現了一個流星雨的動畫效果。背景是黑色的夜空,點綴著隨機閃爍的星星。流星從隨機位置出現,沿對角線下落,并逐漸消失。整個動畫效果流暢,給人一種美麗的視覺體驗。

總結起來,這段代碼通過HTML結構創建基礎頁面,CSS定義靜態元素的樣式和動畫,JavaScript負責動態生成和控制流星雨的動畫效果,三者結合呈現出流星雨的視覺效果。

系列文章

序號目錄直達鏈接
1HTML實現3D相冊HTML實現3D相冊-CSDN博客
2HTML元素周期表HTML元素周期表-CSDN博客
3HTML黑客帝國字母雨HTML黑客帝國字母雨_字母雨html-CSDN博客
4HTML五彩繽紛的愛心HTML五彩繽紛的愛心-CSDN博客
5HTML飄落的花瓣HTML飄落的花瓣-CSDN博客
6HTML哆啦A夢HTML哆啦A夢_html哆啦a夢代碼-CSDN博客
7HTML愛情樹HTML愛情樹-CSDN博客
8HTML新春煙花盛宴HTML新春煙花盛宴-CSDN博客
9HTML想見你HTML想見你-CSDN博客
10HTML藍色愛心HTML藍色愛心-CSDN博客
11HTML跳動的愛心HTML跳動的愛心-CSDN博客
12HTML橙色愛心HTML橙色愛心-CSDN博客
13HTML大雪紛飛HTML大雪紛飛-CSDN博客
14HTML跨年煙花HTML跨年煙花-CSDN博客
15HTML跳動的愛心HTML跳動的愛心-CSDN博客
16HTML動態愛心HTML動態愛心-CSDN博客
17HTML浪漫星空HTML星空特效-CSDN博客
18HTML跳動的雙愛心https://want595.blog.csdn.net/article/details/139799806
19HTML流星雨https://want595.blog.csdn.net/article/details/140035380
20
21
22
23
24
25
26
27

寫在最后

感謝你的喜歡,咱們下期見!

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

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

相關文章

項目風險管理系統有哪些?分享11款主流項目管理系統

本文將分享11款主流項目管理系統&#xff1a;PingCode、Worktile、StandardFusion、MasterControl、ClickUp、SAI360、Netwrix Auditor、MetricStream、Wrike、Celoxis、Zoho Projects。 在項目管理中&#xff0c;風險管理不僅是一個挑戰&#xff0c;也是保證項目順利進行的關鍵…

探索Vim的文本處理能力:精通查找與替換

探索Vim的文本處理能力&#xff1a;精通查找與替換 Vim&#xff0c;作為Linux終端下的王牌文本編輯器&#xff0c;以其強大的功能和靈活性深受開發者和系統管理員的喜愛。在Vim中進行查找和替換是文本編輯中的一項基礎且重要的操作。本文將詳細解釋如何在Vim中執行查找和替換文…

Linux Redis 服務設置開機自啟動

文章目錄 前言一、準備工作二、操作步驟2.1 修改redis.conf文件2.2 創建啟動腳本2.3 設置redis 腳本權限2.4 設置開機啟動2.5 驗證 總結 前言 請各大網友尊重本人原創知識分享&#xff0c;謹記本人博客&#xff1a;南國以南i、 提示&#xff1a;以下是本篇文章正文內容&#x…

編程的難點在哪?是邏輯、算法,還是模塊、框架的掌握?

&#x1f446;點擊關注 回復『新人禮』獲取學習禮包&#x1f446; 很多新手程序員在一開始都是滿懷熱情地投入到編程的學習&#xff0c;但卻在學習過程中處處碰壁&#xff0c;導致放棄。 編程的難點在于邏輯、數學、算法&#xff0c;還是模塊、框架、接口的掌握&#xff1f;但…

idea Error running ‘Application‘

1、Error running ‘Application’ Error running ApplicationError running Application. Command line is too long.Shorten the command line via JAR manifest or via a classpath file and rerun.找到 .idea/libraies/workspace.xml 中的 PropertiesComponent 屬性&#…

Android InputDispatcher分發輸入事件

派發循環是指 InputDispatcher 不斷地派發隊列取出事件&#xff0c;尋找合適的窗口并進行發送的過程&#xff0c;是 InputDispatcher 線程的主要工作 事件發送循環是 InputDispatcher 通過 Connection 對象將事件發送給窗口&#xff0c;并接受其反饋的過程 InputDispatcher —…

Spring Boot跨域請求關鍵處理技術解析

Spring Boot跨域請求關鍵處理技術解析 在Web開發中&#xff0c;跨域請求是一個常見問題&#xff0c;尤其在微服務架構和前后端分離的開發模式中更為突出。Spring Boot作為一種流行的Java Web框架&#xff0c;提供了多種解決跨域請求的方法。本文將詳細解析Spring Boot中跨域請…

在 Qt 中設置 QMainWindow 的大小

問題描述 一位 Qt 新手提問&#xff0c;是否有辦法將 QMainWindow 的大小設置為用戶桌面大小的 70%。他嘗試過使用伸縮因子&#xff0c;但未成功。QWidget::setFixedSize 可以工作&#xff0c;但只能使用像素值。 解決方案 方案一&#xff1a;使用 QDesktopWidget 在 QMain…

大模型賦能全鏈路可觀測性:運維效能的革新之旅

目錄 全鏈路可觀測工程與大模型結合---提升運維效能 可觀測性&#xff08;Observability&#xff09;在IT系統中的應用及其重要性 統一建設可觀測數據 統一建設可觀測數據的策略與流程 全鏈路的構成和監控形態 云上的全鏈路可視方案 為什么一定是Copilot 大模型的Copilo…

mov和mp4區別是什么?蘋果的原創和時代的寵兒

在數字媒體領域&#xff0c;視頻格式的選擇往往決定了觀看體驗的質量和文件的兼容性。在眾多視頻格式中&#xff0c;MOV和MP4無疑是最具代表性的兩種&#xff0c;它們分別承載著蘋果和互聯網世界的技術革新與歷史變遷。本文將帶您穿越時間的長廊&#xff0c;探索MOV與MP4的發展…

A : 平面劃分

Description 一條直線可以把平面分成兩部分&#xff0c;兩條直線分成四部分。那么 n 條直線最多可以把平面分成幾部分&#xff1f; Input 多組數據&#xff0c;每組數據一個正整數 1≤&#xfffd;≤1000。 Output Sample #0 Input Copy 3 5 Output Copy 7 16 Hin…

區間DP——AcWing 320. 能量項鏈

區間DP 定義 區間動態規劃&#xff08;Interval Dynamic Programming&#xff09;&#xff0c;簡稱區間DP&#xff0c;是動態規劃領域的一個重要分支&#xff0c;專門用于解決涉及區間問題的最優化問題。這類問題通常需要在給定的一組區間上找到最優解&#xff0c;比如求解最…

福蘭農莊攜手越南NFC巨頭朱雀橋薇妮她百香果飲料,深化品質合作

近日&#xff0c;國內知名果汁品牌福蘭農莊成功與越南NFC行業領軍者朱雀橋建立深入合作關系。為了進一步提升產品品質和市場競爭力&#xff0c;福蘭農莊派遣專業團隊前往越南&#xff0c;深入VINUT百香果飲料的生產線&#xff0c;學習其從原料采購到產品上市的嚴格操作流程。 在…

IAR 常見報錯與實用小技巧(ZigBee)

一、報錯 1.未發現選擇目標 原因&#xff1a;硬件連接存在問題 解決方案&#xff1a;將數據線重新插拔或更換接口、數據線 2. 燒錄終止 原因&#xff1a;燒錄前未點擊仿真器復位按鈕 解決方案&#xff1a; 進行燒錄前點擊仿真器復位按鈕&#xff08;下載過程中不能按&#xff…

數據結構與算法 - 圖

博客主頁&#xff1a;誓則盟約系列專欄&#xff1a;IT競賽 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? 圖的定義和基本概念&#xff1a; 圖&#xff08;Graph&#xff09;是一種由…

java+mysql圖書管理系統

完整代碼地址 1.運行效果圖 2.主要代碼 2.1.連接數據庫 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

Linux內核 -- Clocksource的注冊與使用

Linux Clocksource 使用教程 本文檔介紹了如何在Linux內核中實現和使用clocksource&#xff0c;并提供了內核態和用戶態使用clocksource的示例代碼。 1. Clocksource 驅動實現 以下是一個簡單的基于周期計數器的clocksource驅動實現示例。 1.1 定義clocksource結構體 #inc…

使用SQLMap進行SQL注入測試

使用SQLMap進行SQL注入測試 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 什么是SQL注入&#xff1f; SQL注入是一種常見的Web應用程序安全漏洞&#xff0c…

點云處理實戰 點云平面擬合

目錄 一、什么是平擬合 二、擬合步驟 三、數學原理 1、平面擬合 2、PCA過程 四、代碼 一、什么是平擬合 平面擬合是指在三維空間中找到一個平面,使其盡可能接近給定的點云。最小二乘法是一種常用的擬合方法,通過最小化誤差平方和來找到最優的擬合平面。 二、擬合步驟…

keepalived腦裂和haproxy

1.用keepalived管理nginx服務 7-1和7-2配置 #安裝nginx systemctl stop firewalld setenforce 0 yum install epel-release.noarch -y yum install -y nginx systemctl start nginxvim /etc/nginx/nginx.confupstream web {server 192.168.91.102;server 192.168.91.10…