當文字成為雨滴:HTML、CSS、JS創作炫酷的“文字雨“動畫!

簡介

在本篇技術文章中,將介紹如何使用HTML、CSS和JavaScript創建一個獨特而引人注目的"文字(字母&數字)"雨🌧?動畫效果。通過該動畫,展現出的是一系列隨機字符將從云朵中下落像是將文字變成雨滴從天而降,營造出與眾不同的視覺效果。

文字雨

HTML

創建一個基本的HTML結構,這段HTML代碼定義了一個容器,其中包含了"云朵"和"雨滴"(即文字元素)。基本結構如下:

  • 首先是類名為container的容器,表示整個動畫的容器;
  • 其次是類名為cloud的容器,表示云朵的容器;
  • 接著是cloud容器中的文字元素,表示雨滴(即文字元素);

然后引入外部創建的css和js文件,可以先定義幾個text容器,用于調整樣式;

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Text Rain Animation</title><link rel="stylesheet" href="./css/style.css">
</head>
<body><div class="container"><div class="cloud"><!-- <div class="text">a</div> --><!-- <div class="text">b</div> --><!-- <div class="text">c</div> --><!-- 雨滴將會在這里出現 --></div></div><script src="./js/main.js"></script>
</body>
</html>

CSS

CSS是為文字雨效果增色添彩的關鍵,使動畫效果更加豐富,關于一些 CSS 樣式:

  • 使用了自定義的顏色變量來為背景色和文本顏色提供值,有助于使代碼易于維護和修改;
  • 利用CSS的陰影效果和動畫功能,創造逼真的"云朵"和流暢的"雨滴"動畫;
    * {margin: 0;padding: 0;box-sizing: border-box;
    }:root {--body-color: #181c1f;--primary-color: #ffffff;
    }body {display: flex;justify-content: center;align-items: center;min-height: 100vh;background-color: var(--body-color);
    }.container {width: 100%;height: 400px;display: flex;justify-content: center;border-bottom: 1px solid rgba(255, 255, 255, .1);/* 添加一個從下往上線性漸變的鏡像效果,增加視覺層次感 */-webkit-box-reflect: below 1px linear-gradient(transparent, transparent, transparent, transparent, #0005);
    }.cloud {position: relative;top: 50px;z-index: 100;/* 橫向云朵 */width: 320px;height: 100px;background-color: var(--primary-color);border-radius: 100px;/* drop-shadow函數將陰影效果應用于投影圖像 */filter: drop-shadow(0 0 30px var(--primary-color));
    }
    .cloud::before {content: "";/* 左側小云朵 */width: 110px;height: 110px;background-color: var(--primary-color);border-radius: 50%;position: absolute;top: -50px;left: 40px;/* 右側大云朵 */box-shadow: 90px 0 0 30px var(--primary-color);
    }.cloud .text {position: absolute;top: 40px;height: 20px;line-height: 20px;text-transform: uppercase;color: var(--primary-color);/* 為文字添加陰影,看上去發光,增加視覺效果 */text-shadow: 0 0 5px var(--primary-color), 0 0 15px var(--primary-color), 0 0 30px var(--primary-color);transform-origin: bottom;animation: animate 2s linear forwards;
    }@keyframes animate {0% {transform: translateX(0);}70% {transform: translateY(290px);}100% {transform: translateY(290px);}
    }
    

    通過關鍵幀動畫 @keyframes animate 定義文字運動的過程,在這里是垂直移動290px,也就是向下移動,模擬下雨的狀態。當然為了讓文字雨效果更加好看,還可以引入一下字體庫;

    Warning

    -webkit-box-reflect:可將元素內容在特定方向上進行軸對稱反射;

    但是該特性是非標準的,請盡量不要在生產環境中使用它!

    目前只有webkit內核的瀏覽器支持,如:谷歌瀏覽器、Safari瀏覽器。在火狐瀏覽器中是不支持的;

    JavaScript

    最后,使用JavaScript來實現文字雨的效果。通過動態生成并隨機選擇字符,可以實現讓這些字符(雨滴)從.cloud(云朵)中降落的效果。JavaScript 腳本邏輯:

  • 首先,定義函數 generateText() 并創建字符集,定義函數 randomText() 通過從給定的字符集中隨機選擇一個字符返回;
  • 接下來,編寫 rainEffect() 函數,在函數內部,首先選取 .cloud 元素同時創建一個新的 <div>元素作為字符節點,設置元素文本內容為函數返回的字符,并添加類名;
  • 然后,利用 Math.random() 方法生成一些隨機值,將這些隨機值應用到創建的 <div> 元素上,包括:
    • 字符距離左側位置,在 .cloud 容器的寬度區間;
    • 字體大小,最大不超過32px;
    • 動畫周期所需的時間(動畫持續時間),2s內;
  • 最后,將其<div>添加到 .cloud 元素中,使用 setTimeout() 函數在2秒后將文字節點從 .cloud 元素中移除,模擬雨滴落地消失效果;

定時器: 為了讓字符(雨滴)持續下落,使用 setInterval 函數和一個時間間隔值來調用 rainEffect() 函數。這樣就是每20毫秒就會生成一個新的字符(雨滴)節點并添加到云朵中。

// 生成字母和數字數組
function generateText() {const letters = [];const numbers = [];const a = "a".charCodeAt(0);for (let i = 0; i < 26; i++) {letters.push(String.fromCharCode(a + i));if (i < 9) {numbers.push(i + 1);}};return [...letters, ...numbers];
};// 從生成的數組中隨機取出一個字符
function randomText() {const texts = generateText();const text = texts[Math.floor(Math.random() * texts.length)];return text;
};function rainEffect() {const cloudEle = document.querySelector(".cloud");const textEle = document.createElement("div");textEle.innerText = randomText();textEle.classList.add("text");const left = Math.floor(Math.random() * 310);const size = Math.random() * 1.5;const duration = Math.random();const styleSheets = {left: `${left}px`,fontSize: `${0.5 + size}em`,animationDuration: `${1 + duration}s`,};Object.assign(textEle.style, styleSheets);cloudEle.appendChild(textEle);setTimeout(() => {cloudEle.removeChild(textEle);}, 2000);
};// 每隔20ms創建一個雨滴元素
setInterval(() => rainEffect(), 20);

關于

String方法:

charCodeAt() fromCharCode()

相關動畫效果文章:

  • 3D視覺畫廊展示旋轉播放
  • CSS簡單實現3D香煙動畫

結論

通過HTML、CSS和JavaScript的緊密配合,成功但不是很完美的創建了一個炫酷的"文字雨"動畫效果,這個動畫可以漸增加網頁的 吸引力! 不要猶豫🖐?,動手嘗試一下,或者甚至你也可以根據自己的需求對文字、樣式和動畫參數進行調整,進一步改善和擴展這個效果;

希望這篇文章對你在開發類似動畫效果時有所幫助!另外如果你對這個案例還有任何問題,歡迎在評論區留言或聯系(私信)我。謝謝閱讀🎉!?

👉原文鏈接

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

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

相關文章

《夢斷代碼》閱讀筆記01

這幾天閱讀了老師推薦的《夢斷代碼》前幾章&#xff0c;通過本書簡介可以知道本書大概主要講的是做軟件過程中的困難。 第一章軟件時間&#xff0c;主要講的是從事軟件制作行業的艱辛&#xff0c;需要沒日沒夜的加班工作&#xff0c;書中有這樣一句話讓我記憶深刻&#xff1a;“…

關于html:form/html:form特性

<html:form>第一遍執行的時候他就會根據action屬性中指定的Action到struts-config.xml文件中找到該Action&#xff0c;并把該Action綁定ActionForm實例化&#xff0c;如果<html:form>的子標簽中(也就是文本框等一些元素)有值&#xff0c;則把這些值填充到對應的Act…

現代人的壓力和焦慮_設計師如何建立減少焦慮和壓力的體驗

現代人的壓力和焦慮From my Brooklyn apartment in New York City, I watch Gov. Andrew Cuomo share the daily Covid-19 death toll with the nation. I watch his broadcast every day, around 11 a.m. I dubbed Cuomo America’s #crisisdaddy and have posted so many Ins…

揭秘京東區塊鏈開源項目——JD Chain

導言 近日&#xff0c;京東區塊鏈底層引擎JD Chain正式對外開源并同步上線開源社區&#xff0c;旨在為企業級用戶和開發者提供開源服務&#xff0c;幫助他們提高研發效率&#xff0c;加速技術創新。3月30日&#xff0c;國家互聯網信息辦公室公布了第一批區塊鏈信息服務名稱及備…

我是如何零基礎入門前端開發的(2021 版)

大家好&#xff0c;我是若川。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以點此鏈接掃碼加我微信 ruochuan12大家好&#xff0c;我是山山而川&…

學計算機學體育生閨女,古力:生個女兒一定學圍棋 生個兒子就去踢足球

成都商報記者 張龑 攝影報道核心提示7奪圍棋世界冠軍的古力結婚了&#xff0c;這意味著他有了更多的責任。婚后的古力做到了以家為重———“現在下完棋就回家&#xff0c;酒基本上不喝了&#xff0c;連唱歌這些娛樂都基本上取消了。”古力對未來還有個愿望&#xff0c;就是生個…

去貴陽參觀大數據到哪參觀_您必須參觀的四個世界

去貴陽參觀大數據到哪參觀Video games have always aimed to create a world separate from our own, with experiences gamers couldn’t get anywhere else. As technology has raced forward with time, these worlds have become more realistic, more believable, and at …

MySQL 不落地遷移、導入 PostgreSQL - 推薦 rds_dbsync

標簽 PostgreSQL , MySQL , rds_dbsync , mysql , mysqldump , copy , mysql_fdw 背景 將MySQL數據不落地的方式導入PostgreSQL。 1 rds_dbsync (推薦使用) 《MySQL準實時同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync》 這個效率最高&#xff0c;支持不落地&#xff0c…

asp.net 六大對象之Request、Response

ASP.NET的六大對象&#xff0c;本質上只是 Context 里面的屬性&#xff0c;嚴格上不是對象。 1.Request-->讀取客戶端在Web請求期間發送的值 2.Response-->封裝了頁面執行期后返回到Http客戶端的輸出 3.Server-->提供對服務器上的屬性和方法的訪問 4.Application-->…

對微型計算機工作影響最小的因數是,(已)保護試題9

繼電保護試題9一、填空題(每空1分&#xff0c;共10分)1、交流電的三要素是最大值(幅值)、角頻率、初相位。2、三極管實現放大作用的外部條件是發射結正向偏置&#xff0c;集電結反向偏置。3、為了確保方向過電流保護在反向兩相短路時不受非故障相電流的影響&#xff0c;保護裝置…

1年工作經驗8月份大廠面試全記錄

大家好&#xff0c;我是若川。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以點此鏈接掃碼加我微信 ruochuan12本文來自讀者AaronKwong 投稿。他參與…

axure ui設計_了解針對UI / UX設計人員的Axure RP 9

axure ui設計Axure is a powerful prototyping software with a lot of history. It has been around for many years and is available for Windows and Mac. Axure gained a lot of functionality over time, and today you can look at Axure as all in one tool. You can b…

如何不讓FCKEditor自動添加P標簽

使用FCKeditor編輯器的時候&#xff0c;點開里面就會自動添加上<P></P>的標簽&#xff0c;按回車也會自動添加上相同的標簽修改/include/FCKeditor/fckconfig.js找到FCKConfig.EnterMode p; //p | div | brFCKConfig.ShiftEnterMode br; //p | div | br替換成FCKCo…

Greenplum 優化CASE - 對齊JOIN字段類型,使用數組代替字符串,降低字符串處理開銷,列存降低掃描開銷...

標簽 PostgreSQL , 數組 , 字符串 , 字符串處理 , JOIN , where , 類型一致性 背景 Greenplum通常被用作OLAP&#xff0c;在一些用戶使用過程中&#xff0c;可能因為數據結構設計&#xff0c;SQL問題等原因導致性能不佳&#xff0c;雖然通過增加節點可以解決問題&#xff0c;但…

杭州 3~5年 前端面經,高頻面試題總結

大家好&#xff0c;我是若川。假期歸來&#xff0c;國慶期間沒有更文&#xff0c;不用想每天發什么文章&#xff0c;不用擔心閱讀量&#xff0c;其實感覺挺好。最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超100人提交了筆…

職稱以考代評學院考計算機嗎,軟考與職稱的關系,軟考是以考代評,不用另外再去評審...

Hokfung(cnitpm.com) 15:16:45軟考與職稱關系&#xff1a;通過了軟考,我們所獲得的只是一種資格,是否聘任相應的職稱,完全取決于各單位的實際情況&#xff0c;國家有關部門并沒有直接的規定。事實上,通過評審方法(也就是常說的"評職稱”) 得到的也只是一個資格,單位既可以…

figma下載_我關于Figma文件封面的故事

figma下載It was 8:40 AM in the morning. I woke up from the bed as my subconscious memory reminded me of the team meeting at 9 AM to discuss what I am working on.早上8:40。 我從床上醒來&#xff0c;因為我的潛意識使我想起了上午9點的團隊會議&#xff0c;討論我的…

圖解選擇排序與插入排序

上一篇詳述了冒泡排序及其優化&#xff0c;有興趣的可以看看&#xff1a; 如何優化冒泡排序&#xff1f; 一、選擇排序&#xff08;SelectionSort&#xff09; 算法思想&#xff1a;首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始…

2011年上半年網頁游戲開測數據報告發布

網頁游戲上半年統計數據顯示&#xff0c;2011年上半年&#xff0c;網頁游戲開測信息總數為304款&#xff0c;排除重復開測信息&#xff0c;在2011年1月1日至6月30日這段期間&#xff0c;共收錄開測&#xff08;含首次開測或更名的&#xff09;的數據為129條。 新公布的產品&…

計算機python程序設計導論,程序設計導論:Python計算與應用開發實踐(原書第2版)...

程序設計導論&#xff1a;Python計算與應用開發實踐(原書第2版)語音編輯鎖定討論上傳視頻《程序設計導論&#xff1a;Python計算與應用開發實踐(原書第2版)》是2018年機械工業出版社出版的圖書&#xff0c;作者是[美] 盧博米爾佩爾科維奇(Ljubomir Perkovic)。書 名程序設計…