简易3DHTML展示

进阶HTML教学,先看实例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>可交互3D篮球</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    body {
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
      background: #121212;
      perspective: 800px; /* 开启3D透视 */
    }
    .container {
      transform-style: preserve-3d;
      cursor: grab;
    }
    .container:active {
      cursor: grabbing;
    }
    .basketball {
      width: 200px;
      height: 200px;
      border-radius: 50%;
      background: #e67e22;
      position: relative;
      box-shadow: inset -25px -25px 50px rgba(0,0,0,0.4);
      transform-style: preserve-3d;
    }
    /* 篮球纹路 */
    .basketball::before,
    .basketball::after {
      content: '';
      position: absolute;
      background: #000;
    }
    .basketball::before {
      width: 6px;
      height: 100%;
      left: 50%;
      transform: translateX(-50%);
    }
    .basketball::after {
      width: 100%;
      height: 6px;
      top: 50%;
      transform: translateY(-50%);
    }
  </style>
</head>
<body>
  <div class="container" id="wrap">
    <div class="basketball" id="ball"></div>
  </div>

  <script>
    const wrap = document.getElementById('wrap');
    let startX = 0, startY = 0;
    let rotateX = 0, rotateY = 0;
    let scale = 1;
    let isDrag = false;

    // 鼠标按下
    wrap.addEventListener('mousedown', e => {
      isDrag = true;
      startX = e.clientX;
      startY = e.clientY;
    });

    // 鼠标移动
    document.addEventListener('mousemove', e => {
      if (!isDrag) return;
      const dx = e.clientX - startX;
      const dy = e.clientY - startY;
      rotateY += dx * 0.5;
      rotateX -= dy * 0.5;
      wrap.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
      startX = e.clientX;
      startY = e.clientY;
    });

    // 鼠标松开
    document.addEventListener('mouseup', () => {
      isDrag = false;
    });

    // 滚轮缩放
    wrap.addEventListener('wheel', e => {
      e.preventDefault();
      scale += e.deltaY > 0 ? -0.05 : 0.05;
      // 限制缩放范围
      scale = Math.max(0.5, Math.min(scale, 2));
      wrap.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
    });
  </script>
</body>
</html>

一个可以交互的3d篮球,运行结果

3c0f8f6d8b191228

关注我 看更多精彩实例

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容