HTML5白云飄飄動態效果教程

HTML5白云飄飄動態效果教程

這里寫目錄標題

  • HTML5白云飄飄動態效果教程
    • 效果介紹
    • 實現步驟
      • 步驟一:創建HTML結構
      • 步驟二:設計CSS樣式
      • 步驟三:添加JavaScript交互
    • 代碼解析
      • HTML結構解析
      • CSS樣式解析
      • JavaScript功能解析
    • 自定義調整
    • 總結

效果介紹

本教程將教你如何使用純HTML5、CSS3和JavaScript創建一個優美的白云飄飄動態效果。最終效果包括:

  • 多朵白云從左向右飄動
  • 云朵大小、位置、速度和透明度各不相同
  • 動態生成隨機云朵
  • 鼠標互動效果(移動鼠標時云朵會輕微跟隨)
  • 在這里插入圖片描述

實現步驟

步驟一:創建HTML結構

首先,我們需要創建基本的HTML結構:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>白云飄飄動態效果</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="sky"><div class="cloud cloud1"></div><div class="cloud cloud2"></div><div class="cloud cloud3"></div><div class="cloud cloud4"></div><div class="cloud cloud5"></div></div><script src="script.js"></script>
</body>
</html>

這里我們創建了一個名為sky的容器,內部放置了5個基礎云朵元素。

步驟二:設計CSS樣式

接下來,創建style.css文件,設計云朵的樣式和動畫效果:

* {margin: 0;padding: 0;box-sizing: border-box;
}body {overflow: hidden;background: linear-gradient(to bottom, #87CEEB, #E0F7FF);height: 100vh;width: 100%;
}.sky {width: 100%;height: 100%;position: relative;
}/* 云朵基本樣式 */
.cloud {position: absolute;background: white;border-radius: 50px;filter: drop-shadow(3px 5px 5px rgba(0, 0, 0, 0.1));
}/* 使用偽元素創建云朵的圓形部分 */
.cloud:before, .cloud:after {content: '';position: absolute;background: white;border-radius: 50%;
}.cloud:before {width: 50px;height: 50px;top: -30px;left: 15px;
}.cloud:after {width: 70px;height: 70px;top: -35px;right: 15px;
}/* 各個云朵的特定樣式 */
.cloud1 {width: 150px;height: 60px;top: 10%;left: -150px;opacity: 0.9;animation: moveCloud 35s linear infinite;
}.cloud2 {width: 120px;height: 50px;top: 25%;left: -120px;opacity: 0.85;animation: moveCloud 45s linear infinite;animation-delay: 5s;
}.cloud3 {width: 180px;height: 70px;top: 40%;left: -180px;opacity: 0.8;animation: moveCloud 40s linear infinite;animation-delay: 10s;
}.cloud4 {width: 100px;height: 40px;top: 60%;left: -100px;opacity: 0.75;animation: moveCloud 50s linear infinite;animation-delay: 15s;
}.cloud5 {width: 160px;height: 65px;top: 75%;left: -160px;opacity: 0.7;animation: moveCloud 38s linear infinite;animation-delay: 20s;
}/* 定義云朵移動動畫 */
@keyframes moveCloud {from {left: -300px;}to {left: 100%;}
}

步驟三:添加JavaScript交互

最后,創建script.js文件,添加動態效果和交互功能:

document.addEventListener('DOMContentLoaded', function() {const sky = document.querySelector('.sky');// 隨機創建更多云朵function createClouds() {const extraClouds = 10; // 額外創建的云朵數量for (let i = 0; i < extraClouds; i++) {const cloud = document.createElement('div');cloud.classList.add('cloud');// 隨機大小const size = Math.random() * 100 + 80;cloud.style.width = `${size}px`;cloud.style.height = `${size / 3}px`;// 隨機位置const top = Math.random() * 90; // 0-90% 的高度cloud.style.top = `${top}%`;// 隨機透明度const opacity = Math.random() * 0.4 + 0.5; // 0.5-0.9cloud.style.opacity = opacity;// 隨機速度const duration = Math.random() * 30 + 30; // 30-60秒cloud.style.animation = `moveCloud ${duration}s linear infinite`;// 隨機延遲const delay = Math.random() * 30;cloud.style.animationDelay = `${delay}s`;// 隨機初始位置const startPosition = Math.random() * 100;cloud.style.left = `${startPosition}%`;// 添加偽元素樣式cloud.style.position = 'absolute';cloud.style.background = 'white';cloud.style.borderRadius = '50px';cloud.style.filter = 'drop-shadow(3px 5px 5px rgba(0, 0, 0, 0.1))';sky.appendChild(cloud);}}// 當頁面加載完成后創建云朵createClouds();// 對云朵添加鼠標互動效果document.addEventListener('mousemove', function(e) {// 計算鼠標在頁面上的相對位置(0-1)const mouseX = e.clientX / window.innerWidth;const mouseY = e.clientY / window.innerHeight;// 獲取所有云朵const clouds = document.querySelectorAll('.cloud');// 為每個云朵添加輕微移動效果clouds.forEach(cloud => {const moveX = (mouseX - 0.5) * 10; // -5 到 5 像素的水平移動const moveY = (mouseY - 0.5) * 5;  // -2.5 到 2.5 像素的垂直移動// 應用變換cloud.style.transform = `translate(${moveX}px, ${moveY}px)`;});});
});

代碼解析

HTML結構解析

  • <div class="sky"> 作為整個場景的容器
  • 內部包含5個基礎云朵,每個云朵都有獨特的類名(cloud1-cloud5)

CSS樣式解析

  1. 云朵造型

    • 使用圓角矩形作為云朵的主體
    • 通過:before:after偽元素添加兩個圓形,形成完整的云朵形狀
    • 使用filter: drop-shadow添加輕微陰影,增強立體感
  2. 動畫效果

    • 使用@keyframes moveCloud定義云朵從左到右的移動軌跡
    • 每個云朵設置不同的動畫持續時間和延遲,使移動看起來更自然
    • 不同云朵設置不同的透明度,模擬遠近感

JavaScript功能解析

  1. 動態生成云朵

    • createClouds()函數隨機生成額外的云朵
    • 每個云朵的大小、位置、透明度、速度和延遲都是隨機的
    • 這使得整個場景更加豐富和自然
  2. 鼠標交互

    • 監聽mousemove事件,獲取鼠標位置
    • 根據鼠標位置計算云朵的輕微位移
    • 使用transform: translate()應用位移效果

自定義調整

你可以根據需要調整以下參數來改變效果:

  1. 背景顏色

    body {background: linear-gradient(to bottom, #新顏色1, #新顏色2);
    }
    
  2. 云朵數量

    const extraClouds = 20; // 增加或減少云朵數量
    
  3. 云朵速度

    .cloud1 {animation: moveCloud 20s linear infinite; // 減小數值加快速度
    }
    
  4. 鼠標互動靈敏度

    const moveX = (mouseX - 0.5) * 20; // 增大數值增強互動效果
    const moveY = (mouseY - 0.5) * 10;
    

總結

通過這個教程,你學會了如何使用HTML5、CSS3和JavaScript創建一個白云飄飄的動態效果。這個效果可以應用于各種網頁場景,如:

  • 網站背景
  • 登錄頁面
  • 天氣相關應用
  • 兒童教育網站
  • 休閑游戲背景

希望這個教程對你有所幫助!你可以根據自己的需求進一步擴展和優化這個效果。

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

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

相關文章

tcp高難度問題

以下是針對這些問題&#xff0c;在面試場景下&#xff0c;既保證理論扎實、邏輯清晰&#xff0c;又具備交流延展性的回答思路與內容&#xff0c;可根據實際面試節奏和面試官反饋靈活調整展開&#xff1a; 1. 客戶端端口號如何確定的&#xff1f; 面試官您好&#xff0c;客戶端…

廣東省省考備考(第二十八天6.13)—資料分析(第二節課)

基期與現期 官方定義&#xff1a;作為對比參照的是基期&#xff0c;而相對于基期比較的是現期 通俗說法&#xff1a;時間靠前的為基期&#xff0c;時間靠后的為現期 增長量與增長率 增長量用來表述基期量與現期量變化的絕對量&#xff1b; 增長率用來表述基期量與現期量變化…

pytorch 中前向傳播和后向傳播的自定義函數

系列文章目錄 文章目錄 系列文章目錄一、torch.autograd.function代碼實例 在開始正文之前&#xff0c;請各位姥爺動動手指&#xff0c;給小店增加一點訪問量吧&#xff0c;點擊小店&#xff0c;同時希望我的文章對你的學習有所幫助。本文也很簡單&#xff0c;主要講解pytorch的…

【項目實訓#08】HarmonyOS知識圖譜前端可視化實現

【項目實訓#08】HarmonyOS知識圖譜前端可視化實現 文章目錄 【項目實訓#08】HarmonyOS知識圖譜前端可視化實現一、背景簡介二、技術方案與架構設計2.1 技術選型2.2 組件架構設計 三、知識圖譜可視化組件實現3.1 KGResultTab組件設計組件模板結構不同狀態的處理用戶交互控制節點…

【軟件開發】什么是DSL

什么是DSL DSL&#xff08;Domain-Specific Language&#xff0c;領域特定語言&#xff09;是一種為特定領域或任務設計的編程語言&#xff0c;目的在于提高該領域中的表達能力與開發效率。 1 在腳本語言中的 DSL 是什么&#xff1f; 在腳本語言&#xff08;如 Python、Lua、…

JasperReport生成PDF/A類型文檔

當JasperReport導出的文檔為PDF/A模式時&#xff0c;該PDF為只讀可以防止被修改。 設置導出參數 JRPdfExporter exporter new JRPdfExporter();exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrints));exporter.setExporterOutput(new SimpleOutputStre…

微信小程序使用畫布實現飄落泡泡功能

微信小程序使用畫布實現飄落泡泡功能&#xff1a;從組件封裝到頁面調用的完整實踐 先看示例截圖&#xff1a; 一、背景與技術選型 在微信小程序中實現類似于飄落的泡泡或者櫻花飄落的功能&#xff0c;一般主要有 Canvas 和圖片兩種方案&#xff1a; &#xff08;1&#xff…

使用STM32設置GPIO中斷

使用S? 32設置GPIO中斷 中斷示例按鍵中斷實例設計&#xff1a;EXTI0和EXTI9硬件連接分析STM32代碼實現代碼說明 中斷示例 設計一個按鍵中斷的實例。設置兩個中斷&#xff1a;EXTI0、EXTI9&#xff0c; 在EXTI9的中斷服務之程序中實現LED燈的控制 按鍵中斷實例設計&#xff…

解決在微信小程序中view組件下的text和images設置了樣式display: flex; align-items: center;對不齊

原始代碼的問題 <view style"display: flex; align-items: center;"><text style"line-height: 1;">全國</text><image src"/images/xia.png" style"height: 20rpx; width: 20rpx; display: block;"></im…

歸并排序詳解:優雅的分治藝術

什么&#xff1f;歸并排序&#xff1f;這讓博主想起了大學那會被《數據結構與算法》支配的恐懼… 哈哈言歸正傳&#xff0c;一直想對算法做一個專欄&#xff0c;因為其實工作中很少很少有機會用到算法&#xff0c;倒是很多工具方法底層會使用&#xff0c;工作被各種需求業務“折…

新零售視域下實體與虛擬店融合的技術邏輯與商業模式創新——基于開源AI智能名片與鏈動2+1模式的S2B2C生態構建

摘要&#xff1a;新零售的核心在于打破線上線下邊界&#xff0c;構建“人、貨、場”的全場景融合生態。本文提出&#xff0c;實體線下店與虛擬店的協同發展是新零售的重要演進方向&#xff0c;其底層邏輯在于滿足消費者作為“現實人”的體驗需求與“虛擬人”的效率需求。通過引…

可視化圖解算法51:尋找第K大(數組中的第K個最大的元素)

牛客網 面試筆試 TOP101 | LeetCode 215. 數組中的第K個最大元素 1. 題目 描述 有一個整數數組&#xff0c;請你找出數組中第 k 大的數。 給定一個整數數組 a ,同時給定它的大小n和要找的 k &#xff0c;請返回第 k 大的數(包括重復的元素&#xff0c;不用去重)&…

DataWhale-零基礎網絡爬蟲技術(一)

課程鏈接先給各位 ↓↓↓ &#xff08;點擊即可食用.QAQ Datawhale-學用 AI,從此開始 一、引言 還是在筆記的開始&#xff0c;嘮嘮一些自己的故事 十年前第一次接觸網絡&#xff0c;也可以說是第一次接觸計算機的時候&#xff0c;那時候還是在中學階段&#xff0c;那時候大…

Linux02

目錄 linux常用命令 用戶和權限 壓縮和解壓縮 其他相關命令 Linux中安裝常用軟件 1.1. jdk的安裝 1.1.1. 卸載linux中自帶的open-jdk 1.1.2. 把安裝包上傳到 linux上 1.1.3. 解壓安裝包 1.1.4. 配置環境變量 1.1.5 驗證環境變量 1.3 安裝mysql 1.3.1. 檢查依賴 1.…

JavaSE超詳細筆記-網絡編程篇-基于黑馬

1. 什么是網絡編程【理解】 1.1 概念 在網絡通信協議下&#xff0c;不同計算機上運行的程序&#xff0c;進行的數據傳輸。 應用場景: 即時通信、網游對戰、金融證券、國際貿易、郵件、等等。 不管是什么場景&#xff0c;都是計算機跟計算機之間通過網絡進行數據傳輸Java中可以使…

時序數據庫Influxdb3 core安裝

本文介紹時序數據庫Influxdb3 core(開源版本)的安裝和簡單使用以及調優參數的介紹。 預期&#xff1a; 安裝時序數據庫Influxdb3 core 創建數據庫mydb 寫入數據&#xff1b; 使用influxdb3-cli 和 grafana2種方式查詢寫入的數據 前期準備&#xff1a; linux服務器(本文服…

區間合并:區間合并問題

區間合并&#xff1a;區間合并問題 區間合并 www.acwing.com/problem/content/805/ 按區間的左端點排序 掃描整個區間&#xff0c;在這過程中把可能有交點的區間合并 全包含&#xff1a;不做改動相交&#xff1a;right 后移相離&#xff1a;更新至下一個維護區間 import j…

中國古代數學符號的演進 | 算籌 / 符號 / 算法

注&#xff1a;本文為“中國古代數學符號”相關合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 這個中國古代的數學瑰寶&#xff0c;到底厲害在哪&#xff1f; 原創 朱一文 科普中國 2024 年 07 月 31 日 15:30 北…

XMLDecoder、LDAP 注入與修復

問題&#xff1a;XMLDecoder注入 針對 xml 解碼器的注入攻擊 反序列化用戶控制的 XML &#xff0c;程序沒有進行驗證&#xff0c; 會讓攻擊者有機會在服務器上執行惡意代 碼。 例&#xff1a;下面代碼片段中&#xff0c; XMLDecoder 處理不可信的輸入。 ... XMLDecode…

Unity 對象層級處理小結

一.第一優先級Camera Culling Mask屬性指定Camera顯示的Layer,可以多選 Depth:Depth大的Camera顯示的Layer顯示在前面 二.避免使用PositionZ調整遮擋關系 在 2D 游戲中,雖然可以通過 Z 軸來調整顯示順序,但這與 2D 游戲的設計理念不符。在可以控制顯示層級的多個要素或方…