• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

HTML实现动态圣诞树和雪花效果

武飞扬头像
于北斋
帮助1

圣诞树是通过一个圣诞树图标设置为3D进行旋转,涉及HTML、CSS、JavaScript知识点

雪花背景是利用HTML的新特性canvas编写;

学新通

源代码:

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8" />
  5.  
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6.  
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7.  
    <link rel="stylesheet" href="style.css" />
  8.  
    <link
  9.  
    href="https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.3/css/all.css"
  10.  
    rel="stylesheet"
  11.  
    />
  12.  
    <title>Document</title>
  13.  
    <style>
  14.  
    * {
  15.  
    margin: 0;
  16.  
    padding: 0;
  17.  
    }
  18.  
     
  19.  
    body {
  20.  
    background: #333;
  21.  
    display: flex;
  22.  
    width: 100%;
  23.  
    height: 100vh;
  24.  
    justify-content: center;
  25.  
    align-items: center;
  26.  
    }
  27.  
     
  28.  
    .main {
  29.  
    width: 200px;
  30.  
    height: 200px;
  31.  
    position: absolute;
  32.  
    display: flex;
  33.  
    justify-content: center;
  34.  
    align-items: center;
  35.  
    animation: roll 5s linear infinite;
  36.  
    transform-style: preserve-3d;
  37.  
    transform: rotateX(-15deg);
  38.  
    }
  39.  
     
  40.  
    .main i {
  41.  
    font-size: 100px;
  42.  
    /* 树泛光的颜色 */
  43.  
    text-shadow: 0 0 10px white, 0 0 20px rgb(50, 50, 156);
  44.  
    position: absolute;
  45.  
    /* 树的颜色 */
  46.  
    color: green;
  47.  
    }
  48.  
     
  49.  
    /* 每片树叶开始旋转的位置 */
  50.  
    .main i:nth-child(2) {
  51.  
    transform: rotateY(90deg);
  52.  
    }
  53.  
     
  54.  
    .main i:nth-child(3) {
  55.  
    transform: rotateY(45deg);
  56.  
    }
  57.  
     
  58.  
    .main i:nth-child(4) {
  59.  
    transform: rotateY(-45deg);
  60.  
    }
  61.  
     
  62.  
    @keyframes roll {
  63.  
    100% {
  64.  
    transform: rotateX(-15deg) rotateY(360deg);
  65.  
    }
  66.  
    }
  67.  
     
  68.  
    .main div {
  69.  
    position: absolute;
  70.  
    width: 100%;
  71.  
    height: 100%;
  72.  
    border: 2px solid black;
  73.  
    }
  74.  
    * {
  75.  
    margin: 0;
  76.  
    padding: 0;
  77.  
    }
  78.  
    html {
  79.  
    overflow: hidden;
  80.  
    }
  81.  
    body {
  82.  
    background-size: cover;
  83.  
    }
  84.  
    h1 {
  85.  
    color: #0097e6;
  86.  
    position: absolute;
  87.  
    left: 50%;
  88.  
    top: 50%;
  89.  
    transform: translate(-50%, -50%);
  90.  
    font-size: 40px;
  91.  
    cursor: default;
  92.  
    }
  93.  
    canvas {
  94.  
    filter: blur(1px);
  95.  
    }
  96.  
    </style>
  97.  
    </head>
  98.  
     
  99.  
    <body>
  100.  
    <!-- 雪花背景画布 -->
  101.  
    <canvas id="canvas"></canvas>
  102.  
    <!-- 圣诞树图标 -->
  103.  
    <div class="main">
  104.  
    <i class="fas fa-tree"></i>
  105.  
    <i class="fas fa-tree"></i>
  106.  
    <i class="fas fa-tree"></i>
  107.  
    <i class="fas fa-tree"></i>
  108.  
    </div>
  109.  
    </body>
  110.  
     
  111.  
    <script type="text/javascript">
  112.  
    var canvas = document.getElementById("canvas");
  113.  
    var context = canvas.getContext("2d");
  114.  
    var w = window.innerWidth;
  115.  
    var h = window.innerHeight;
  116.  
    canvas.width = w;
  117.  
    canvas.height = h;
  118.  
    //设置雪片数量
  119.  
    var num = 200;
  120.  
    //定义雪花数组
  121.  
    var snows = [];
  122.  
    for (var i = 0; i < num; i ) {
  123.  
    //向数组填充元素,元素属性有坐标及半径,均为随机生成,其中半径上限为3
  124.  
    snows.push({
  125.  
    x: Math.random() * w,
  126.  
    y: Math.random() * h,
  127.  
    r: Math.random() * 3,
  128.  
    });
  129.  
    }
  130.  
    //绘制图片
  131.  
    function draw() {
  132.  
    context.clearRect(0, 0, w, h); //清空画布
  133.  
    context.beginPath(); //画笔开始
  134.  
    for (var i = 0; i < num; i ) {
  135.  
    var snow = snows[i];
  136.  
    context.fillStyle = "rgba(255,255,255,0.4)"; //设定填充方式为白色半透明
  137.  
    context.moveTo(snow.x, snow.y); //画笔移动到指定坐标处
  138.  
    context.arc(snow.x, snow.y, snow.r, 0, Math.PI * 2); //根据属性绘制圆形
  139.  
    }
  140.  
    context.fill(); //填充路径
  141.  
    //雪片落下
  142.  
    move();
  143.  
    }
  144.  
    function move() {
  145.  
    for (var i = 0; i < num; i ) {
  146.  
    var snow = snows[i];
  147.  
    snow.y = (7 - snow.r) / 10; //根据雪片大小调整落下速度
  148.  
    if (snow.y > h) {
  149.  
    //如果雪片超出画布范围,则在顶端重绘
  150.  
    snows[i] = { x: Math.random() * w, y: 0, r: snow.r };
  151.  
    }
  152.  
    }
  153.  
    }
  154.  
    //执行和调用函数
  155.  
    draw();
  156.  
    setInterval(draw, 1); //每隔一毫秒重绘一次
  157.  
    </script>
  158.  
    </html>
学新通

参考学习教程:b站一个叫   flashaxe 的up主

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaejbj
系列文章
更多 icon
同类精品
更多 icon
继续加载