🎉中秋佳节:简单实现月饼雨

引言

中秋佳节,是中国传统的重要节日之一。在这个特殊的日子里,人们会赏月、吃月饼、赏花灯等。而在现代科技的加持下,我们可以通过编写代码来实现一个有趣的效果------月饼雨。本文将介绍如何使用技术手段实现这一特效。

代码实现

html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <title>中秋主题页面</title>
    <style>
      #redpacket-container {
        position: relative;
        width: 100%;
        height: 100vh;
        overflow: hidden;
      }

      .redpacket {
        position: absolute;
        top: -100px;
        left: calc(50% - 50px);
        width: 100px;
        height: auto;
        animation-name: redpacket-fall;
        animation-duration: 3s;
      }

      @keyframes redpacket-fall {
        from {
          top: -100px;
          opacity: 1;
          transform: rotate(0deg);
          transform-origin: center center;
          animation-timing-function: ease-in-out;
          animation-fill-mode: both;
          animation-iteration-count: infinite;
          animation-direction: normal;
          animation-play-state: running;
        }

        to {
          top: calc(100vh + 100px);
          opacity: 0.5;
          transform-origin: center center;
          transform: rotate(360deg);
        }
      }
    </style>
  </head>
  <body>
    <div id="redpacket-container"></div>
    <script>
      // 生成一个随机颜色
      function getRandomColor() {
        // 生成三个随机数,范围在0到255之间
        var r = Math.floor(Math.random() * 256);
        var g = Math.floor(Math.random() * 256);
        var b = Math.floor(Math.random() * 256);

        return `rgba(${r}, ${g}, ${b}, 0.5)`;
      }

      function createRedPacket() {
        var redPacket = document.createElement("img");
        redPacket.src = "./月饼.svg";
        redPacket.className = "redpacket";
        redPacket.style.left = Math.random() * (window.innerWidth - 100) + "px";
        redPacket.style.filter = `drop-shadow(2px 2px 4px ${getRandomColor()})`;
        document.getElementById("redpacket-container").appendChild(redPacket);
      }

      setInterval(createRedPacket, 200); // 每200豪秒创建一个月饼
    </script>
  </body>
</html>

这段代码主要用来创建一个中秋节主题的网页,其中会不断生成并下落带有随机颜色的月饼图像。

HTML结构

这个HTML文件主要包括一个div元素,其id是redpacket-container。这个div元素是相对定位的,并且它的宽度是100%,高度是视口的100%,超过视口的部分会被隐藏(由于overflow: hidden)。

CSS样式

CSS部分定义了一个名为redpacket的类,这个类的元素是绝对定位的,初始时在顶部(-100px),在页面中心(通过left: calc(50% - 50px)计算得出),宽100px,高自动。它有一个名为redpacket-fall的关键帧动画,这个动画会让元素从顶部落到底部,同时逐渐旋转和变透明。

JavaScript

JavaScript部分定义了两个函数,getRandomColorcreateRedPacket

  1. getRandomColor函数:这个函数生成一个随机的RGBA颜色。它生成三个随机数(在0到255之间),然后将这三个数作为RGB颜色的三个分量,并设置颜色的透明度为0.5。
  2. createRedPacket函数:这个函数创建一个新的元素(一个图像元素),类名为"redpacket",然后随机设置它在页面上的位置(在窗口宽度减去100px和元素宽度的中间位置),并给它一个随机的阴影效果。最后,这个新创建的元素被添加到id为"redpacket-container"的元素中。

setInterval函数设置为每200毫秒(由于你这里的注释写的是100毫秒,但根据代码实际是200毫秒)调用createRedPacket函数,这样就会不断生成新的"月饼"元素并添加到页面上。

视觉效果

整体上,这段代码的视觉效果应该是页面上不断下落并旋转的月饼图像,这些月饼图像会以不同的颜色和位置出现。

总结

通过编写代码实现月饼雨效果,我们可以在中秋佳节期间为网页增添一些趣味和节日氛围。记得中秋节吃月饼~

相关推荐
risc1234569 分钟前
Lucene80DocValuesConsumer 五种类型源码阅读顺序
java·服务器·前端
小米渣的逆袭16 分钟前
Chrome Extension Script World(ISOLATED / MAIN)原理与适用场景
前端·javascript·chrome
微信开发api-视频号协议31 分钟前
Codex++安全边界探秘:从模型能力到风险防御
前端·安全·微信·企业微信
想你依然心痛1 小时前
AtomCode 在前端开发中的实战体验:React + TypeScript 项目开发实录
前端·react.js·typescript
疯狂的魔鬼1 小时前
精确计算容器剩余视口高度:useAutoContainerFullHeight 的工程实践
前端·css·typescript
用户059540174461 小时前
用了 3 个月 ChatGPT,才发现它一直在遗忘——用 Playwright 自动化验证记忆存储一致性
前端·css
玄玄子1 小时前
xss前端解决方案
前端·浏览器·xss
林希_Rachel_傻希希1 小时前
web性能优化之——AI总结视频
前端·javascript·面试
前端炒粉1 小时前
个人简历面经总结二
前端·网络·vue.js·react.js·面试
用户059540174462 小时前
用了半年 LangChain Memory,才发现回滚测试压根没测对
前端·css