javascript
复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>3D 环形旋转图片</title>
<style>
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: radial-gradient(circle at center, #111, #000);
overflow: hidden;
}
.carousel {
width: 400px;
height: 300px;
perspective: 1500px;
}
.ring {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
animation: rotate 30s linear infinite;
}
.card {
position: absolute;
width: 280px;
height: 200px;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.6), 0 0 20px rgba(255,255,255,0.1);
transition: transform 0.3s, box-shadow 0.3s;
}
.card img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.card:hover {
transform: scale(1.05) translateZ(500px);
box-shadow: 0 20px 40px rgba(255, 255, 255, 0.4);
}
@keyframes rotate {
from { transform: rotateY(0deg); }
to { transform: rotateY(-360deg); }
}
</style>
</head>
<body>
<div class="carousel">
<div class="ring" id="ring"></div>
</div>
<script>
const ring = document.getElementById("ring");
const numCards = 8;
const angle = 360 / numCards;
const images = [
"https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg",
"https://images.pexels.com/photos/257360/pexels-photo-257360.jpeg",
"https://images.pexels.com/photos/34950/pexels-photo.jpg",
"https://images.pexels.com/photos/459225/pexels-photo-459225.jpeg",
"https://images.pexels.com/photos/207962/pexels-photo-207962.jpeg",
"https://images.pexels.com/photos/356378/pexels-photo-356378.jpeg",
"https://images.pexels.com/photos/158607/cairn-fog-mystical-background-158607.jpeg",
"https://images.pexels.com/photos/236047/pexels-photo-236047.jpeg"
];
for (let i = 0; i < numCards; i++) {
const card = document.createElement("div");
card.className = "card";
card.style.transform = `rotateY(${i * angle}deg) translateZ(500px)`;
const img = document.createElement("img");
img.src = images[i];
card.appendChild(img);
ring.appendChild(card);
}
</script>
</body>
</html>