CSS3 简单3D旋转画册

CSS3 简单3D旋转画册

上次我们简单介绍了c3的一些基础知识,我们今天来做一个小练习;

在这里插入图片描述在这里插入图片描述
这个简单的案例是3D的一个旋转画册,那么上面是我们的一个效果图,因为不能够传视屏所以就暂时只能够截图来看一下具体结构。
正如大家所看见的,该相册由两个正方体组成,由大的正方体包裹着小的正方体,实现方式其实是用了margin或者使用定位position来实现。

其实这个画册的做法很简单,这边就不一步一步的解释了,下面我将代码粘贴出来,大家自行测试。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>3D旋转画册</title>
		<link rel="stylesheet" type="text/css" href="css/reset.css" />
	</head>
	<style>
		#album-inner{
			height: 100px;
			width: 100px;
			position: absolute;
			top: 45%;
			left: 45%;
			transform-style: preserve-3d;
			/* transform: rotateX(-30deg) rotateY(-45deg); */
			/* perspective: 800px; */
			animation: move 16s linear infinite;
		}
		//选择器创建move运动规则
		@keyframes move{
			from{
				transform: rotateX(0deg) rotateY(0deg);
			}
			to{
				transform: rotateX(-360deg) rotateY(-360deg);
			}
		}
		ul li{
			height: 100%;
			width: 100%;
			position: absolute;
		}
		ul li img{
			height: 100%;
			width: 100%;
		}
		/* 六张图片分别设置位置 */
		#album-inner li:nth-of-type(1){
			transform: translateZ(50px);
		}
		#album-inner li:nth-of-type(2){
			transform: translateX(50px) rotateY(90deg);
		}
		#album-inner li:nth-of-type(3){
			transform: translateZ(-50px);
		}
		#album-inner li:nth-of-type(4){
			transform: translateX(-50px) rotateY(90deg);
		}
		#album-inner li:nth-of-type(5){
			transform: translateY(-50px) rotateX(90deg);
		}
		#album-inner li:nth-of-type(6){
			transform: translateY(50px) rotateX(90deg);
		}
		/* 外面的旋转 */
		#album-outer{
			/* transition: transfrom 3s linear !important; */
			height: 160px;
			width: 160px;
			position: absolute;
			top: 41%;
			left: 42.5%;
			transform-style: preserve-3d;
			/* transform: rotateX(-30deg) rotateY(-45deg); */
			/* perspective: 800px; */
			animation: move 16s linear infinite;
			/* opacity: 0.5; */
		}
		#album-outer li{
			opacity: 0.3;
			transition:all 3s linear;
		}
		#album-outer li:nth-of-type(1){
			transform: translateZ(80px);
		}
		#album-outer li:nth-of-type(2){
			transform: translateX(80px) rotateY(90deg);
		}
		#album-outer li:nth-of-type(3){
			transform: translateZ(-80px);
		}
		#album-outer li:nth-of-type(4){
			transform: translateX(-80px) rotateY(90deg);
		}
		#album-outer li:nth-of-type(5){
			transform: translateY(-80px) rotateX(90deg);
		}
		#album-outer li:nth-of-type(6){
			transform: translateY(80px) rotateX(90deg);
		}
		
		
	</style>
	<body>
		<ul id="album-inner">
			<li><img src="./img/1.jpg" alt=""></li>
			<li><img src="./img/2.jpg" alt=""></li>
			<li><img src="./img/3.jpg" alt=""></li>
			<li><img src="./img/4.jpg" alt=""></li>
			<li><img src="./img/5.jpg" alt=""></li>
			<li><img src="./img/6.jpg" alt=""></li>
		</ul>
		<ul id="album-outer">
			<li><img src="./img/1.jpg" alt=""></li>
			<li><img src="./img/2.jpg" alt=""></li>
			<li><img src="./img/3.jpg" alt=""></li>
			<li><img src="./img/4.jpg" alt=""></li>
			<li><img src="./img/5.jpg" alt=""></li>
			<li><img src="./img/6.jpg" alt=""></li>
		</ul>
	</body>
	<script type="text/javascript" src="js/jquery3.4.1.js"></script>
	<script type="text/javascript">
		// 设置一个点击事件点击平移外部距离
		$(function(){
			// 设置一个开关,判断外部闭合还是打开
			var switchMove = false;
			var outerLi = $('#album-outer').children();
			// 书写滚动函数
			function move(){
				if(switchMove){
					$('#album-outer').css({
						transition:'all 3s linear',
						height:'160px',
						width:'160px',
						top:'41%',
						left: '42.5%'
					});
					// 内部透明
					$('#album-inner li').css('opacity',1);
					// 外部透明
					// outerLi.css('opacity',0.8);
					outerLi.eq(0).css({
						transform: 'translateZ(80px)'
					})
					outerLi.eq(1).css({
						transform: 'translateX(80px) rotateY(90deg)'
					})
					outerLi.eq(2).css({
						transform: 'translateZ(-80px)'
					})
					outerLi.eq(3).css({
						transform: 'translateX(-80px) rotateY(90deg)'
					})
					outerLi.eq(4).css({
						transform: 'translateY(-80px) rotateX(90deg)'
					})
					outerLi.eq(5).css({
						transform: 'translateY(80px) rotateX(90deg)'
					})
					switchMove = !switchMove;
				}else{
					// 内部透明
					// $('#album-inner li').css('opacity',0.5);
					// 外部透明
					outerLi.css('opacity',0.6);
					$('#album-outer').css({
						transition:'all 3s linear',
						height:'300px',
						width:'300px',
						left:'37.5%',
						top:'35.5%'
					});
					outerLi.eq(0).css({
						transform: 'translateZ(200px)'
					})
					outerLi.eq(1).css({
						transform: 'translateX(200px) rotateY(90deg)'
					})
					outerLi.eq(2).css({
						transform: 'translateZ(-200px)'
					})
					outerLi.eq(3).css({
						transform: 'translateX(-200px) rotateY(90deg)'
					})
					outerLi.eq(4).css({
						transform: 'translateY(-200px) rotateX(90deg)'
					})
					outerLi.eq(5).css({
						transform: 'translateY(200px) rotateX(90deg)'
					})
					switchMove = !switchMove;
				}
				
			}
			
			// 添加事件监听
			$(document).on('click',move)
			
			
		})
	</script>
</html>

这边我就只简单解释一下思路,制作3D模型最主要的是要有一个3D的思维,我这边制作3D的方式主要是将所有的面集中在一个点上(使用position),然后想象着将每个面发射出去,例如今天的案例是一个正方形,那么我们将六个面按照不同的方向发射出去相同的距离(使用translate平移),平移出去之后我们要将每个面旋转到各自相应的位置上就可以了(rotate旋转),具体操作什么模型还需要自己进行一个计算。当然最重要的要记得给父级元素添加transfrom-style,让子元素在3D空间显示。
具体让模型旋转起来,是使用@keyframes选择器定义样式,然后使用animation让他动起来,这个使用方法和jquery当中的animate很相似,作用方式和使用方式都差不多,但是使用css3会有更高的效率。

在套用我的代码时候记得自行添加图片,自行引入jquery
文章就到这里,如有错误疑问请指出,将及时修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值