<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>5种3D图片切换效果</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: #f5f5f5;
color: #333;
padding: 20px;
}
h1 {
text-align: center;
margin-bottom: 30px;
color: #444;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.slider-container {
margin-bottom: 50px;
padding: 20px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h2 {
margin-bottom: 15px;
color: #555;
border-bottom: 1px solid #eee;
padding-bottom: 10px;
}
/* 通用滑块样式 */
.slider {
position: relative;
width: 100%;
height: 400px;
overflow: hidden;
perspective: 1000px;
}
.slider img {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
transition: all 0.8s ease;
}
.slider-nav {
text-align: center;
margin-top: 15px;
}
.slider-nav button {
padding: 8px 15px;
margin: 0 5px;
background: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s;
}
.slider-nav button:hover {
background: #45a049;
}
/* 效果1: 3D翻转 */
#slider1 {
perspective: 1000px;
}
#slider1 img {
transform-style: preserve-3d;
backface-visibility: hidden;
}
#slider1 img:not(.active) {
transform: rotateY(180deg);
opacity: 0;
}
#slider1 img.active {
transform: rotateY(0deg);
opacity: 1;
}
/* 效果2: 3D立方体 */
#slider2 {
perspective: 1200px;
}
#slider2 .slider-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform 1s;
}
#slider2 img {
position: absolute;
width: 100%;
height: 100%;
opacity: 0.9;
}
/* 效果3: 3D卡片堆叠 */
#slider3 {
perspective: 1500px;
}
#slider3 .slider-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
}
#slider3 img {
position: absolute;
width: 90%;
height: 90%;
left: 5%;
top: 5%;
box-shadow: 0 10px 20px rgba(0,0,0,0.2);
transform-origin: center center -200px;
transition: transform 0.8s;
}
/* 效果4: 3D旋转木马 */
#slider4 {
perspective: 2000px;
}
#slider4 .slider-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform 1s;
}
#slider4 img {
position: absolute;
width: 60%;
height: 80%;
left: 20%;
top: 10%;
opacity: 0.8;
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}
/* 效果5: 3D翻页 */
#slider5 {
perspective: 1200px;
}
#slider5 .slider-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
}
#slider5 img {
position: absolute;
width: 100%;
height: 100%;
transform-origin: left center;
transition: transform 1s;
box-shadow: -5px 5px 10px rgba(0,0,0,0.2);
}
.credit {
text-align: center;
margin-top: 30px;
color: #777;
font-size: 14px;
}
.credit a {
color: #4CAF50;
text-decoration: none;
}
</style>
</head>
<body>
<div class="container">
<h1>JS+CSS3实现五种3D图片切换效果</h1>
<!-- 效果1: 3D翻转 -->
<div class="slider-container">
<h2>效果1: 3D翻转效果</h2>
<div class="slider" id="slider1">
<img src="https://picsum.photos/800/400?random=1" alt="图片1" class="active">
<img src="https://picsum.photos/800/400?random=2" alt="图片2">
<img src="https://picsum.photos/800/400?random=3" alt="图片3">
<img src="https://picsum.photos/800/400?random=4" alt="图片4">
</div>
<div class="slider-nav">
<button onclick="changeSlide('slider1', 'prev')">上一张</button>
<button onclick="changeSlide('slider1', 'next')">下一张</button>
</div>
</div>
<!-- 效果2: 3D立方体 -->
<div class="slider-container">
<h2>效果2: 3D立方体效果</h2>
<div class="slider" id="slider2">
<div class="slider-inner">
<img src="https://picsum.photos/800/400?random=5" alt="图片1">
<img src="https://picsum.photos/800/400?random=6" alt="图片2">
<img src="https://picsum.photos/800/400?random=7" alt="图片3">
<img src="https://picsum.photos/800/400?random=8" alt="图片4">
</div>
</div>
<div class="slider-nav">
<button onclick="rotateCube('slider2', 'prev')">上一张</button>
<button onclick="rotateCube('slider2', 'next')">下一张</button>
</div>
</div>
<!-- 效果3: 3D卡片堆叠 -->
<div class="slider-container">
<h2>效果3: 3D卡片堆叠效果</h2>
<div class="slider" id="slider3">
<div class="slider-inner">
<img src="https://picsum.photos/800/400?random=9" alt="图片1" style="transform: rotateY(0deg) translateZ(0px); z-index: 4;">
<img src="https://picsum.photos/800/400?random=10" alt="图片2" style="transform: rotateY(60deg) translateZ(-100px); z-index: 3;">
<img src="https://picsum.photos/800/400?random=11" alt="图片3" style="transform: rotateY(120deg) translateZ(-100px); z-index: 2;">
<img src="https://picsum.photos/800/400?random=12" alt="图片4" style="transform: rotateY(180deg) translateZ(-100px); z-index: 1;">
</div>
</div>
<div class="slider-nav">
<button onclick="rotateStack('slider3', 'prev')">上一张</button>
<button onclick="rotateStack('slider3', 'next')">下一张</button>
</div>
</div>
<!-- 效果4: 3D旋转木马 -->
<div class="slider-container">
<h2>效果4: 3D旋转木马效果</h2>
<div class="slider" id="slider4">
<div class="slider-inner">
<img src="https://picsum.photos/800/400?random=13" alt="图片1" style="transform: rotateY(0deg) translateZ(300px);">
<img src="https://picsum.photos/800/400?random=14" alt="图片2" style="transform: rotateY(90deg) translateZ(300px);">
<img src="https://picsum.photos/800/400?random=15" alt="图片3" style="transform: rotateY(180deg) translateZ(300px);">
<img src="https://picsum.photos/800/400?random=16" alt="图片4" style="transform: rotateY(270deg) translateZ(300px);">
</div>
</div>
<div class="slider-nav">
<button onclick="rotateCarousel('slider4', 'prev')">上一张</button>
<button onclick="rotateCarousel('slider4', 'next')">下一张</button>
</div>
</div>
<!-- 效果5: 3D翻页 -->
<div class="slider-container">
<h2>效果5: 3D翻页效果</h2>
<div class="slider" id="slider5">
<div class="slider-inner">
<img src="https://picsum.photos/800/400?random=17" alt="图片1" style="transform: rotateY(0deg); z-index: 4;">
<img src="https://picsum.photos/800/400?random=18" alt="图片2" style="transform: rotateY(180deg); z-index: 3;">
<img src="https://picsum.photos/800/400?random=19" alt="图片3" style="transform: rotateY(180deg); z-index: 2;">
<img src="https://picsum.photos/800/400?random=20" alt="图片4" style="transform: rotateY(180deg); z-index: 1;">
</div>
</div>
<div class="slider-nav">
<button onclick="flipPage('slider5', 'prev')">上一张</button>
<button onclick="flipPage('slider5', 'next')">下一张</button>
</div>
</div>
<div class="credit">
</div>
</div>
<script>
// 效果1: 3D翻转
function changeSlide(sliderId, direction) {
const slider = document.getElementById(sliderId);
const images = slider.querySelectorAll('img');
let activeIndex = 0;
// 找到当前活动图片的索引
images.forEach((img, index) => {
if (img.classList.contains('active')) {
activeIndex = index;
}
});
// 移除所有active类
images.forEach(img => img.classList.remove('active'));
// 计算新索引
if (direction === 'next') {
activeIndex = (activeIndex + 1) % images.length;
} else {
activeIndex = (activeIndex - 1 + images.length) % images.length;
}
// 添加active类
images[activeIndex].classList.add('active');
}
// 效果2: 3D立方体
let cubeRotation = 0;
function rotateCube(sliderId, direction) {
const sliderInner = document.getElementById(sliderId).querySelector('.slider-inner');
if (direction === 'next') {
cubeRotation -= 90;
} else {
cubeRotation += 90;
}
sliderInner.style.transform = `rotateY(${cubeRotation}deg)`;
// 更新图片位置
const images = sliderInner.querySelectorAll('img');
images.forEach((img, index) => {
const angle = (index * 90) + cubeRotation;
img.style.transform = `rotateY(${angle}deg) translateZ(300px)`;
});
}
// 初始化立方体
document.addEventListener('DOMContentLoaded', function() {
const sliderInner = document.querySelector('#slider2 .slider-inner');
const images = sliderInner.querySelectorAll('img');
images.forEach((img, index) => {
const angle = index * 90;
img.style.transform = `rotateY(${angle}deg) translateZ(300px)`;
});
});
// 效果3: 3D卡片堆叠
let stackRotation = 0;
function rotateStack(sliderId, direction) {
const images = document.getElementById(sliderId).querySelectorAll('img');
if (direction === 'next') {
stackRotation += 60;
} else {
stackRotation -= 60;
}
images.forEach((img, index) => {
const angle = (index * 60) + stackRotation;
img.style.transform = `rotateY(${angle}deg) translateZ(-100px)`;
img.style.zIndex = (4 - index) % 4;
});
}
// 效果4: 3D旋转木马
let carouselRotation = 0;
function rotateCarousel(sliderId, direction) {
const sliderInner = document.getElementById(sliderId).querySelector('.slider-inner');
if (direction === 'next') {
carouselRotation -= 90;
} else {
carouselRotation += 90;
}
sliderInner.style.transform = `rotateY(${carouselRotation}deg)`;
}
// 效果5: 3D翻页
let currentPage = 0;
function flipPage(sliderId, direction) {
const images = document.getElementById(sliderId).querySelectorAll('img');
const totalPages = images.length;
if (direction === 'next' && currentPage < totalPages - 1) {
images[currentPage].style.transform = 'rotateY(180deg)';
images[currentPage + 1].style.transform = 'rotateY(0deg)';
currentPage++;
} else if (direction === 'prev' && currentPage > 0) {
images[currentPage].style.transform = 'rotateY(180deg)';
images[currentPage - 1].style.transform = 'rotateY(0deg)';
currentPage--;
}
// 更新z-index
images.forEach((img, index) => {
img.style.zIndex = totalPages - index;
});
}
</script>
</body>
</html>
329

被折叠的 条评论
为什么被折叠?



