You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js中3D旋转立方体如何显示全部6个面?

修复3D旋转立方体缺失面的问题

问题根源

你的立方体两个面的3D定位错误,同时动画关键帧的旋转逻辑未覆盖所有面的展示角度,导致旋转过程中仅能看到4个面。

修复步骤

1. 修正各面的3D空间定位

当前face3、face4、face5的transform组合存在错误,调整为正确的立方体六面定位:

.cubespinner {
  /* 保留原有基础样式 */
  .face1 {
    transform: translateZ(100px);
    color: #dd0031;
  }
  .face2 {
    transform: rotateY(90deg) translateZ(100px);
    color: #f06529;
  }
  .face3 {
    transform: rotateY(180deg) translateZ(100px); /* 修正:定位立方体背面 */
    color: #28a4d9;
  }
  .face4 {
    transform: rotateY(-90deg) translateZ(100px); /* 修正:定位立方体左侧面 */
    color: #ec4d28;
  }
  .face5 {
    transform: rotateX(90deg) translateZ(100px); /* 修正:定位立方体顶面 */
    color: #efd81d;
  }
  .face6 {
    transform: rotateX(-90deg) translateZ(100px); /* 定位立方体底面 */
    color: #5ed4f4;
  }
}

同时注意你JS图标的颜色值写错:#dd700改为#efd81d(标准JS黄色),避免颜色显示异常。

2. 调整动画关键帧,覆盖所有面展示

原keyframes的旋转逻辑有遗漏,调整后让每个周期阶段对应展示一个新面:

@keyframes spincube {
  0% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
  16.67% { transform: rotateY(-90deg); } /* 展示face2 */
  33.33% { transform: rotateY(-180deg); } /* 展示face3 */
  50% { transform: rotateY(-270deg); } /* 展示face4 */
  66.67% { transform: rotateX(90deg); } /* 展示face5 */
  83.33% { transform: rotateX(-90deg); } /* 展示face6 */
  100% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } /* 回到初始状态 */
}

每个1/6周期(2秒)切换一个面视角,确保6个面都能被完整展示。

3. 补充父容器透视效果

给stage-cube-cont添加透视,强化3D层次感,避免面重叠视觉问题:

.stage-cube-cont {
  perspective: 1000px;
  width: 200px;
  margin: 0 auto;
}

修正后的完整代码

React组件(修正颜色值)

<div className="stage-cube-cont">
  <div className="cubespinner">
    <div className="face1">
      <FontAwesomeIcon icon={faPython} color="#DD0031" />
    </div>
    <div className="face2">
      <FontAwesomeIcon icon={faHtml5} color="#F06529" />
    </div>
    <div className="face3">
      <FontAwesomeIcon icon={faCss3} color="#28A4D9" />
    </div>
    <div className="face4">
      <FontAwesomeIcon icon={faGitAlt} color="#EC4D28" />
    </div>
    <div className="face5">
      <FontAwesomeIcon icon={faJsSquare} color="#efd81d" />
    </div>
    <div className="face6">
      <FontAwesomeIcon icon={faReact} color="#5ED4F4" />
    </div>
  </div>
</div>

CSS代码

.stage-cube-cont {
  perspective: 1000px;
  width: 200px;
  margin: 0 auto;
}

.cubespinner {
  animation-name: spincube;
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
  animation-duration: 12s;
  transform-style: preserve-3d;
  transform-origin: 100px 100px 0;

  div {
    position: absolute;
    width: 200px;
    height: 200px;
    border: 1px solid #ccc;
    background: rgba(255, 255, 255, 0.4);
    text-align: center;
    font-size: 100px;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: 0 0 20px 0px lightyellow;
    backface-visibility: visible;
  }

  .face1 {
    transform: translateZ(100px);
    color: #dd0031;
  }
  .face2 {
    transform: rotateY(90deg) translateZ(100px);
    color: #f06529;
  }
  .face3 {
    transform: rotateY(180deg) translateZ(100px);
    color: #28a4d9;
  }
  .face4 {
    transform: rotateY(-90deg) translateZ(100px);
    color: #ec4d28;
  }
  .face5 {
    transform: rotateX(90deg) translateZ(100px);
    color: #efd81d;
  }
  .face6 {
    transform: rotateX(-90deg) translateZ(100px);
    color: #5ed4f4;
  }
}

@keyframes spincube {
  0% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
  16.67% { transform: rotateY(-90deg); }
  33.33% { transform: rotateY(-180deg); }
  50% { transform: rotateY(-270deg); }
  66.67% { transform: rotateX(90deg); }
  83.33% { transform: rotateX(-90deg); }
  100% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
}

调整后,立方体旋转时将完整展示6个面,每个面的3D定位准确,动画会依次切换到每个面的视角。

内容的提问来源于stack exchange,提问作者Fernando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:27:35