3D立方体图册

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D立方体图册</title>
    <style>
      * {
     
        padding: 0;
        margin: 0;
        box-sizing: border-box;
      }
      body {
     
        display: flex;
        align-items: center;
        justify-content: center;
        min-height: 100vh;
        background: #f5f5f5;
      }
      .box {
     
        position: relative;
        width: 240px;
        height: 300px;
        transform-style: preserve-3d;
        transform: perspective(1000px) rotateY(180deg);
        transition: 1.5s;
      }
      .box::before {
     
        content: "";
        position: absolute;
        width: 240px;
        height: 240px;
        background: #2225;
        transform: translateY(240px) rotateX(90deg) scale(1.1);
        filter: blur(40px);
      }
      .card {
     
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 300px;
        background: linear-gradient(90deg, #ddd, #eee);
        transform-origin: center;
        transform: rotateY(calc(var(--i) * 90deg)) translateZ(120px);
      }
      .img-box {
     
        width: 100%;
        height: 240px;
        text-align: center;
      }
      img {
     
        width: 100%;
        height: 100%;
        object-fit: cover;
      }
      .img-box h2 {
     
        color: red;
      }
      .img-box span {
     
        color: purple;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="box">
        <div class="card" style="--i: 1">
          <div class="img-box">
            <img src="../assets/img/公孙离.jpg" alt="" srcset="" />
            <h2>公孙离</h2>
            <span>射手</span>
          </div>
        </div>
        <div class="card" style="--i: 2">
          <div class="img-box">
            <img src="../assets/img/宫本武藏.jpg" alt="" srcset="" />
            <h2>宫本武藏</h2>
            <span>战士</span>
          </div>
        </div>
        <div class="card" style="--i: 3">
          <div class="img-box">
            <img src="../assets/img/诸葛亮.jpg" alt="" srcset="" />
            <h2>诸葛亮</h2>
            <span>法师</span>
          </div>
        </div>
        <div class="card" style="--i: 4">
          <div class="img-box">
            <img src="../assets/img/赵云.jpg" alt="" srcset="" />
            <h2>赵云</h2>
            <span>刺客</span>
          </div>
        </div>
      </div>
    </div>
  </body>
  <script>
    const box = document.querySelector(".box");
    let isMoving = false;

    function handleMouseMove(event) {
     
      if (!isMoving) {
     
        isMoving = true;
        requestAnimationFrame(() => {
     
          const boxWidth = box.offsetWidth;
          const boxHeight = box.offsetHeight;
          const mouseX = event.clientX - box.getBoundingClientRect().left;
          const mouseY = event.clientY - box.getBoundingClientRect().top;
          const rotateY = (mouseX / boxWidth - 0.5) * 60; // 通过鼠标位置计算 Y 轴旋转角度
          const rotateX = (0.5 - mouseY / boxHeight) * 60; // 通过鼠标位置计算 X 轴旋转角度

          box.style.transform = `perspective(1000px) rotateX(${ rotateX}deg) rotateY(${ rotateY}deg)`;
          isMoving = false;
        });
      }
    }

    box.addEventListener("mousemove", handleMouseMove);
  </script>
</html>
在这里插入代码片

在这里插入图片描述

相关推荐

  1. Unity3D 立方体纹理与自制天空盒详解

    2024-02-06 07:02:12       15 阅读
  2. 3D立体盒子练习

    2024-02-06 07:02:12       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 07:02:12       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 07:02:12       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 07:02:12       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 07:02:12       18 阅读

热门阅读

  1. 12118 - Inspector‘s Dilemma (UVA)

    2024-02-06 07:02:12       31 阅读
  2. 图论:合适的环

    2024-02-06 07:02:12       31 阅读
  3. 【算法练习】leetcode算法题合集之动态规划篇

    2024-02-06 07:02:12       40 阅读
  4. DNS服务器异常有什么影响,怎么处理

    2024-02-06 07:02:12       27 阅读
  5. Golang gorm 结构体定义使用

    2024-02-06 07:02:12       30 阅读
  6. 2024-02-05

    2024-02-06 07:02:12       30 阅读
  7. 普通人应该如何使用GPT

    2024-02-06 07:02:12       33 阅读
  8. 当前小程序跳转另一个小程序

    2024-02-06 07:02:12       30 阅读
  9. 0205作业

    2024-02-06 07:02:12       30 阅读