純 HTML+CSS+JS 實現一個炫酷的圣誕樹動畫特效

純 HTML+CSS+JS 實現一個炫酷的圣誕樹動畫特效

前言

圣誕節快到了,今天給大家帶來一個簡單但是效果不錯的圣誕樹動畫特效。這個特效完全使用原生 HTML、CSS 和 JavaScript 實現,包含閃爍的星星、隨機彩燈等元素,非常適合節日氣氛!

效果展示

在這里插入圖片描述

實現步驟

1. HTML 結構

首先創建基本的 HTML 結構,包括星星、樹身和樹干:

<!DOCTYPE html>
<html>
<head><title>圣誕樹</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="tree"><div class="star"></div><div class="tree-body"><span></span><span></span><span></span><span></span><span></span></div><div class="trunk"></div></div><script src="script.js"></script>
</body>
</html>

2. CSS 樣式

使用 CSS 來創建圣誕樹的外觀和動畫效果:

body {background: #0e3742;display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;
}.tree {position: relative;
}.star {width: 20px;height: 20px;background: yellow;clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);position: absolute;top: -10px;left: 50%;transform: translateX(-50%);animation: starTwinkle 1s infinite;
}.tree-body {display: flex;flex-direction: column;align-items: center;
}.tree-body span {display: block;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 60px solid #0f9b0f;margin-top: -30px;
}.tree-body span:nth-child(1) { width: 20px; }
.tree-body span:nth-child(2) { width: 40px; }
.tree-body span:nth-child(3) { width: 60px; }
.tree-body span:nth-child(4) { width: 80px; }
.tree-body span:nth-child(5) { width: 100px; }.trunk {width: 20px;height: 40px;background: #573b1c;margin: 0 auto;
}@keyframes starTwinkle {0%, 100% { opacity: 1; }50% { opacity: 0.3; }
}.tree-body span::after {content: '';position: absolute;width: 6px;height: 6px;background: red;border-radius: 50%;animation: lightTwinkle 0.8s infinite;
}@keyframes lightTwinkle {0%, 100% { opacity: 1; }50% { opacity: 0.4; }
}

3. JavaScript 動態效果

使用 JavaScript 添加隨機彩燈效果:

// 添加隨機彩燈
function addLights() {const treeSpans = document.querySelectorAll('.tree-body span');treeSpans.forEach(span => {const width = span.offsetWidth;const lights = Math.floor(width / 20);for(let i = 0; i < lights; i++) {const light = document.createElement('div');light.className = 'light';light.style.left = `${Math.random() * width}px`;light.style.backgroundColor = `hsl(${Math.random() * 360}, 100%, 50%)`;light.style.animationDelay = `${Math.random() * 2}s`;span.appendChild(light);}});
}// 頁面加載完成后添加彩燈
window.addEventListener('load', addLights);

代碼解析

HTML 部分

  • tree 類用于包含整個圣誕樹
  • star 類創建樹頂的星星
  • tree-body 包含多個 span 元素,形成樹的主體
  • trunk 類創建樹干

CSS 部分

  1. 基礎樣式

    • 使用 flex 布局使樹居中顯示
    • 設置深色背景突出樹的效果
  2. 星星效果

    • 使用 clip-path 創建星形
    • 添加 starTwinkle 動畫使星星閃爍
  3. 樹身效果

    • 使用 CSS 邊框技巧創建三角形
    • 通過不同的寬度創建層次感
  4. 動畫效果

    • 使用 @keyframes 創建閃爍動畫
    • 為彩燈添加隨機延遲效果

JavaScript 部分

  • 動態計算并添加彩燈
  • 使用隨機數生成彩燈位置和顏色
  • 添加隨機動畫延遲創造自然效果

自定義修改

你可以通過修改以下參數來自定義圣誕樹:

  1. 樹的顏色:修改 .tree-body span 中的 border-bottom 顏色
  2. 樹的大小:調整 border-leftborder-right 的值
  3. 樹干大小:修改 .trunk 的尺寸
  4. 彩燈數量:在 script.js 中調整計算邏輯
  5. 動畫速度:修改 animation 的時間參數

注意事項

  1. 確保三個文件在同一目錄下
  2. 正確引用 CSS 和 JavaScript 文件
  3. 使用現代瀏覽器以支持所有 CSS 特性

總結

這個圣誕樹特效完全使用原生前端技術實現,不需要任何外部庫。通過組合使用 HTML 結構、CSS 動畫和 JavaScript 交互,我們創建了一個既簡單又好看的節日裝飾效果。

希望這個教程對你有幫助!如果你有任何問題或建議,歡迎在評論區留言。

完整代碼

完整代碼已在上文提供,你可以直接復制使用。記得給個贊和收藏哦!

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

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

相關文章

Maven:Java項目構建與管理的利器

在Java開發領域&#xff0c;Maven無疑是一個舉足輕重的工具。它不僅簡化了項目的構建和依賴管理&#xff0c;還促進了團隊協作和持續集成。本文將深入探討Maven的核心功能、基本配置以及在實際項目中的應用。 Maven簡介 Maven是Apache基金會下的一個開源項目&#xff0c;旨在…

【ES6復習筆記】Promise對象詳解(12)

1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中處理異步操作的一種機制&#xff0c;它可以讓異步操作更加容易管理和控制。Promise 對象代表一個異步操作的最終完成或失敗&#xff0c;并提供了一種方式來處理操作的結果。 2. Promise 的基本語法 Promise 對象有三…

【RAG實戰】語言模型基礎

語言模型賦予了計算機理解和生成人類語言的能力。它結合了統計學原理和深度神經網絡技術&#xff0c;通過對大量的樣本數據進行復雜的概率分布分析來學習語言結構的內在模式和相關性。具體地&#xff0c;語言模型可根據上下文中已出現的詞序列&#xff0c;使用概率推斷來預測接…

【ES6復習筆記】Map(14)

概念 Map 是 JavaScript 中的一種數據結構&#xff0c;它允許你存儲鍵值對&#xff0c;并且可以通過鍵來訪問對應的值。在本教程中&#xff0c;我們將學習如何聲明、添加、刪除、獲取和遍歷 Map 集合。 ES6 提供了 Map 數據結構。它類似于對象&#xff0c;也是鍵值對的集合。…

富芮坤FR800X系列之PWM輸出程序應用設計

文章目錄 前言1.設計背景2.簡介3.如何設計控制調光的接口呢4.硬件設計5.軟件設計5.1.軟件流程圖5.2.軟件代碼 6.小結 前言 版權歸作者所有、未經允許、請勿轉載。 讀者對象&#xff1a; 本文檔主要適用以下工程師&#xff1a; ?嵌入式系統工程師 ?單片機軟件工程師 ?IOT固…

Ftrans數據擺渡系統 搭建安全便捷跨網文件傳輸通道

一、專業數據擺渡系統對企業的意義 專業的數據擺渡系統對企業具有重要意義&#xff0c;主要體現在以下幾個方面?&#xff1a; 1、?數據安全性?&#xff1a;數據擺渡系統通過加密傳輸、訪問控制和審計日志等功能&#xff0c;確保數據在傳輸和存儲過程中的安全性。 2、?高…

EasyPoi 使用$fe:模板語法生成Word動態行

1 Maven 依賴 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version> </dependency> 2 application.yml spring:main:allow-bean-definition-over…

定義Shape:打造屬于你的獨特圖形

自定義Shape:打造屬于你的獨特圖形 在Android開發中,自定義圖形繪制是一個非常重要的技能,尤其是在需要實現復雜UI或特定設計需求時。Android提供了android.graphics.drawable.shapes包,其中包含了一些基本的形狀類,如RectShape、OvalShape等。然而,有時這些基本形狀無法…

python 滲透開發工具之SQLMapApi Server不同IP服務啟動方式處理 解決方案SqlMapApiServer外網不能訪問的情況

目錄 說在前面 什么是 SQLMapAPI 說明 sqlmapApi能干什么 sqlmapApi 服務安裝相關 kali-sqlmap存放位置 正常啟動sqlmap-api server SqlMapApi-Server 解決外網不能訪問情況 說在前面 什么是sqlmap 這個在前面已經說過了&#xff0c;如果這個不知道&#xff0c;就可以…

【基礎還得練】 KKT 條件

優秀教程-真正理解拉格朗日乘子法和 KKT 條件&#xff1a; link優秀教程-最優化(6)&#xff1a;一般約束優化問題的最優性理論&#xff1a; link KKT條件&#xff08;Karush-Kuhn-Tucker條件&#xff09;是非線性規劃中的一組必要條件&#xff0c;在某些情況下也是最優解的充分…

使用 Webpack 優雅的構建微前端應用?

Module Federation 通常譯作“模塊聯邦”&#xff0c;是 Webpack 5 新引入的一種遠程模塊動態加載、運行技術。MF 允許我們將原本單個巨大應用按我們理想的方式拆分成多個體積更小、職責更內聚的小應用形式&#xff0c;理想情況下各個應用能夠實現獨立部署、獨立開發(不同應用甚…

Boost之log日志使用

不講理論&#xff0c;直接上在程序中可用代碼&#xff1a; 一、引入Boost模塊 開發環境&#xff1a;Visual Studio 2017 Boost庫版本&#xff1a;1.68.0 安裝方式&#xff1a;Nuget 安裝命令&#xff1a; #只安裝下面幾個即可 Install-package boost -version 1.68.0 Install…

【MySQL】十四,MySQL 8.0的隱藏索引

在MySQL 8.0之前的版本中&#xff0c;索引只能直接刪除。如果刪除后發現引起了系統故障&#xff0c;又必須進行創建。當表的數據量比較大的時候&#xff0c;這樣做的代價就會非常高。 在MySQL 8.0中&#xff0c;提供了隱藏索引。如果想刪除某個索引&#xff0c;那么在實際刪除…

【ES6復習筆記】解構賦值(2)

介紹 解構賦值是一種非常方便的語法&#xff0c;可以讓我們更簡潔地從數組和對象中提取值&#xff0c;并且可以應用于很多實際開發場景中。 1. 數組的解構賦值 數組的解構賦值是按照一定模式從數組中提取值&#xff0c;然后對變量進行賦值。下面是一個例子&#xff1a; con…

爬蟲數據存儲:Redis、MySQL 與 MongoDB 的對比與實踐

爬蟲的核心任務是從網絡中提取數據&#xff0c;而存儲這些數據是流程中不可或缺的一環。根據業務需求的不同&#xff0c;存儲的選擇可能直接影響數據處理的效率和開發體驗。本文將介紹三種常用的存儲工具——Redis、MySQL 和 MongoDB&#xff0c;分析它們的特點&#xff0c;并提…

【Python】使用匿名函數Lambda解析html源碼的任意元素(Seleinium ,BeautifulSoup皆適用)

一直都發現lambda函數非常好用&#xff0c;它可以用簡潔的方式編寫小函數&#xff0c;無需寫冗長的過程就可以獲取結果。干脆利落&#xff01; 它允許我們定義一個匿名函數&#xff0c;在調用一次性的函數時非常有用。 最近整理了一些&#xff0c;lambda函數結合BeautifulSou…

Bash語言的語法

Bash語言簡介與應用 Bash&#xff08;Bourne Again SHell&#xff09;是一種Unix Shell和命令語言&#xff0c;在Linux、macOS及其他類Unix系統中被廣泛使用。作為GNU項目的一部分&#xff0c;Bash不僅是對早期Bourne Shell的增強&#xff0c;還引入了許多特性和功能&#xff…

Ingress-Nginx Annotations 指南:配置要點全方面解讀(下)

文章目錄 1.HTTP2 Push Preload2.Server Alias3.Server snippet4.Client Body Buffer Size5.External Authentication6.Global External Authentication7.Rate Limiting8.Global Rate Limiting9.Permanent Redirect10.Permanent Redirect Code11.Temporal Redirect12.SSL Passt…

互聯網路由架構

大家覺得有意義和幫助記得及時關注和點贊!!! 本書致力于解決實際問題&#xff0c;書中包含大量的架構圖、拓撲圖和真實場景示例&#xff0c;內容全面 且易于上手&#xff0c;是不可多得的良心之作。本書目的是使讀者成為將自有網絡集成到全球互聯網 領域的專家。 以下是筆記內…

【Flutter_Web】Flutter編譯Web第三篇(網絡請求篇):dio如何改造方法,變成web之后數據如何處理

前言 Flutter端在處理網絡請求的時候&#xff0c;最常用的庫當然是Dio了&#xff0c;那么在改造成web端的時候&#xff0c;最先處理的必然是網絡請求&#xff0c;否則沒有數據去處理驅動實圖渲染。 官方鏈接 pub https://pub.dev/packages/diogithub https://github.com/c…