css练习,实现3D效果旋转幻灯片

比较有趣的一个css小练习,注解已经写到代码里面了,直接看就OK了

原文来自哔哩哔哩的米修在线视频教学:3D效果|旋转幻灯片 可以看一下作为知识拓展,感觉还不错

先来看效果

   

项目结构

index.html

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<link rel="stylesheet" href="style.css">
	<title>旋转幻灯片</title>
</head>
<body>
	<div class="slider">
		<div class="slide visible">
			<img src="img/img1.jpg" alt="">
		</div>
		<div class="slide">
			<img src="img/img2.jpg" alt="">
		</div>
		<div class="slide">
			<img src="img/img3.jpg" alt="">
		</div>
		<div class="slide">
			<img src="img/img4.jpg" alt="">
		</div>
		<div class="slide">
			<img src="img/img5.jpg" alt="">
		</div>
	</div>
	<script type="text/javascript">
		const slider = document.querySelector('.slider')
		const slides = document.querySelectorAll('.slide')
		let activeSlide = 0
		function changeSlide(){
			//由于visible是管理透明度的,等同于直接操控visible就能操控显隐
			slides[activeSlide].classList.remove('visible')//清除visible并让活跃图片进入下一个
			activeSlide++
			//判断activeSlide是否超过了图片数量,是的话就归零重来
			if(activeSlide>=slides.length){
				activeSlide=0
			}
			//给下一位添加活跃
			slides[activeSlide].classList.add('visible')
		}
		// 添加监听事件,每2000毫秒执行一次changeSlide的改变活跃图片函数
		slider.addEventListener("animationstart",()=>{
			setInterval(changeSlide,2000)
		})
	</script>
</body>
</html>

style.css

*{
	box-sizing:border-box
}
body{
	background-color: #333;
	display: flex;
	justify-content: center;
	align-items: center;
	height: 100vh;
	margin: 0;
	perspective: 1000px;/*这个值可以让3d效果更加立体化*/
}
.slider{
	/* 这里需要让所有图片显示在一个slider里面,所以相对定位,slide则是绝对定位,否则会重叠 */
	position: relative;
	width: 500px;
	height: 500px;
	transform-style: preserve-3d;/*transform-style: flat|preserve-3d;在2d显示还是3d*/
	animation: rotate 4s linear infinite;
	/*animation实际上是animation-name,animation-duration,animation-timing-function,animation-delay,
	animation-iteration-count,animation-direction的简写,可以分别搜一下这几个
	语法:animation: name duration timing-function delay iteration-count direction;*/
}
@keyframes rotate{
	0%{
		transform: rotateY(80deg);
	}
	50%{
		transform: rotateY(260deg);
	}
	100%{
		transform: rotateY(440deg);
	}
}


.slide{
	opacity: 0;/*透明,由于最后一个叠在上面,想显示第一张先就需要先透明隐藏*/
	position: absolute;
	top:0;
	left:0;
	width: 100%;
	height: 100%;
}
.slide img{
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.slide.visible{/*需要显示的则赋值*/
	opacity: 1;
}

/* 媒体编辑器 */
@media (max-width:500px){
	.slider{
		width: 280px;
		height: 280px;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值