当文字成为雨滴: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.mzph.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)。书 名程序设计…