📅  最后修改于: 2023-12-03 15:22:10.403000             🧑  作者: Mango
在 web 开发中,使用 CSS 3D 变换创建立方体是无聊但常见的。本文将指导您创建一个可以通过轻触或鼠标单击旋转的 3D 立方体。
首先,我们需要一个包含 6 个面的 HTML 结构。为了使立方体相对于其容器居中,我们将其放在一个 div 容器内,并应用样式来定位它。
<div class="cube-container">
<div class="cube">
<div class="front"></div>
<div class="back"></div>
<div class="top"></div>
<div class="bottom"></div>
<div class="left"></div>
<div class="right"></div>
</div>
</div>
在样式表中,我们定义了容器和立方体的外观和布局。这些样式允许我们指定立方体的大小和位置,并使其符合我们的设计。
/* 容器样式 */
.cube-container {
perspective: 1000px; /* 透视视角 */
margin: 0 auto;
width: 300px;
height: 300px;
}
/* 立方体样式 */
.cube {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d; /* 保持 3D 效果 */
transition: transform 1s; /* 过渡动画 */
}
/* 六个面样式 */
.front, .back, .top, .bottom, .left, .right {
position: absolute;
width: 300px;
height: 300px;
background-size: cover;
}
.front {
transform: translateZ(150px);
}
.back {
transform: rotateY(180deg) translateZ(150px);
}
.top {
transform: rotateX(90deg) translateZ(150px);
transform-origin: top;
}
.bottom {
transform: rotateX(-90deg) translateZ(150px);
transform-origin: bottom;
}
.left {
transform: rotateY(-90deg) translateZ(150px);
transform-origin: left;
}
.right {
transform: rotateY(90deg) translateZ(150px);
transform-origin: right;
}
最后,我们需要使用 JavaScript 创建一个交互式立方体。下面是一个可供参考的 JavaScript 代码片段。
const cube = document.querySelector(".cube");
let clicked = false;
let currentX, currentY, initialX, initialY, xOffset = 0, yOffset = 0;
document.addEventListener("mousedown", dragStart);
document.addEventListener("mouseup", dragEnd);
document.addEventListener("mousemove", drag);
document.addEventListener("touchstart", dragStart, { passive: false });
document.addEventListener("touchend", dragEnd);
document.addEventListener("touchmove", drag, { passive: false });
function dragStart(e) {
initialX = e.clientX - xOffset;
initialY = e.clientY - yOffset;
if (e.type === "touchstart") {
initialX = e.touches[0].clientX - xOffset;
initialY = e.touches[0].clientY - yOffset;
}
if (e.target === cube) {
clicked = true;
}
}
function dragEnd(e) {
initialX = currentX;
initialY = currentY;
clicked = false;
}
function drag(e) {
if (clicked) {
e.preventDefault();
currentX = e.clientX - initialX;
currentY = e.clientY - initialY;
if (e.type === "touchmove") {
currentX = e.touches[0].clientX - initialX;
currentY = e.touches[0].clientY - initialY;
}
xOffset = currentX;
yOffset = currentY;
setCubeTransform(currentX, currentY);
}
}
function setCubeTransform(x, y) {
cube.style.transform = `rotateX(${y}deg) rotateY(${x}deg)`;
}
通过组合 HTML、CSS 和 JavaScript,我们创建了一个有趣的交互式 3D 立方体。现在您可以用这些知识来探索和构建更复杂的 3D 应用程序,例如游戏和模型查看器!
注意:此示例可能不会在所有浏览器中完美运行。在生产环境中使用时,应该进行浏览器测试和兼容性检查。