实现3D照片墙效果

<!DOCTYPE html>
<html lang="en" ondragstart="return false">

<head>
	<meta charset="UTF-8">
	<meta name="Keywords" content="">
	<meta name="Description" content="">
	<title>wyc-3D照片墙</title>
	<link rel="shortcut icon" href="程序员头像.ico" type="image/x-icon">
	<link rel="stylesheet" href="./程序员头像.ico">
	<style type="text/css">
		/* 去掉默认效果 */
		* {
			margin: 0;
			padding: 0;
		}

		body {
			background: #222;
			overflow: hidden;
			/* 取消选中 */
			user-select: none;
		}

		@keyframes rotate {
			100% {
				transform: rotateY(360deg);
			}
		}

		.perspective {
			/*子元素透视 场景深度*/
			perspective: 600px;
		}

		.wrap {
			/* 3d */
			width: 135px;
			height: 240px;
			margin: 100px auto;
			position: relative;
			/* border: 1px solid red; */
			transform: rotateX(-20deg) rotateY(0deg);
			transform-style: preserve-3d;

		}

		.wrap img {
			display: block;
			/* 绝对定位 */
			position: absolute;
			width: 100%;
			height: 100%;
			transform: rotateY(0deg) translateZ(0px);
			background: transparent;
			box-shadow: 0 0 4px #fff;
			border-radius: 5px;

			/* webkit */
		}

		/* 照片底座 */
		.wrap p {
			width: 1200px;
			height: 1200px;
			background: -webkit-radial-gradient(center center, 600px 600px, rgba(122, 122, 122, .5), rgba(0, 0, 0, 0));
			position: absolute;
			border-radius: 50%;
			left: 50%;
			top: 100%;
			margin-left: -600px;
			margin-top: -600px;
			/* 沿着x轴按倒 */
			transform: rotateX(90deg);
		}
	</style>
</head>

<body>
	<!-- 盒子容器 -->
	<div class="perspective">
		<div class="wrap" id="imgwrap">
			<img src="./img/1 .jpg" alt="" class="f1">
			<img src="./img/2 .jpg" alt="" class="f1">
			<img src="./img/3 .jpg" alt="" class="f1">
			<img src="./img/4 .jpg" alt="" class="f1">
			<img src="./img/5 .jpg" alt="" class="f1">
			<img src="./img/6 .jpg" alt="" class="f1">
			<img src="./img/7 .jpg" alt="" class="f1">
			<img src="./img/8 .jpg" alt="" class="f1">
			<img src="./img/9 .jpg" alt="" class="f1">
			<img src="./img/10 .jpg" alt="" class="f1">
			<img src="./img/11 .jpg" alt="" class="f1">
			<img src="./img/12 .jpg" alt="" class="f1">
			<img src="./img/13 .jpg" alt="" class="f1">
			<img src="./img/14 .jpg" alt="" class="f1">
			<img src="./img/15 .jpg" alt="" class="f1">
			<img src="./img/16 .jpg" alt="" class="f1">
			<img src="./img/17 .jpg" alt="" class="f1">
			<img src="./img/18 .jpg" alt="" class="f1">
			<img src="./img/19 .jpg" alt="" class="f1">
			<img src="./img/20 .jpg" alt="" class="f1">
			<img src="./img/21 .jpg" alt="" class="f1">
			<img src="./img/22 .jpg" alt="" class="f1">
			<img src="./img/23 .jpg" alt="" class="f1">
			<img src="./img/24 .jpg" alt="" class="f1">
			<img src="./img/25 .jpg" alt="" class="f1">
			<img src="./img/26 .jpg" alt="" class="f1">
			<img src="./img/27 .jpg" alt="" class="f1">
			<img src="./img/28 .jpg" alt="" class="f1">
			<img src="./img/29 .jpg" alt="" class="f1">
			<img src="./img/30 .jpg" alt="" class="f1">


			<img src="./img/31 .jpg" alt="" class="f2">
			<img src="./img/32 .jpg" alt="" class="f2">
			<img src="./img/33 .jpg" alt="" class="f2">
			<img src="./img/34 .jpg" alt="" class="f2">
			<img src="./img/35 .jpg" alt="" class="f2">
			<img src="./img/36 .jpg" alt="" class="f2">
			<img src="./img/37 .jpg" alt="" class="f2">
			<img src="./img/38 .jpg" alt="" class="f2">
			<img src="./img/39 .jpg" alt="" class="f2">
			<img src="./img/40 .jpg" alt="" class="f2">
			<img src="./img/41 .jpg" alt="" class="f2">
			<img src="./img/42 .jpg" alt="" class="f2">
			<img src="./img/43 .jpg" alt="" class="f2">
			<img src="./img/44 .jpg" alt="" class="f2">
			<img src="./img/45 .jpg" alt="" class="f2">
			<img src="./img/46 .jpg" alt="" class="f2">
			<img src="./img/47 .jpg" alt="" class="f2">
			<img src="./img/48 .jpg" alt="" class="f2">
			<img src="./img/49 .jpg" alt="" class="f2">
			<img src="./img/50 .jpg" alt="" class="f2">
			<img src="./img/51 .jpg" alt="" class="f2">
			<img src="./img/52 .jpg" alt="" class="f2">
			<img src="./img/53 .jpg" alt="" class="f2">
			<img src="./img/54 .jpg" alt="" class="f2">
			<img src="./img/55 .jpg" alt="" class="f2">
			<img src="./img/56 .jpg" alt="" class="f2">
			<img src="./img/57 .jpg" alt="" class="f2">
			<img src="./img/58 .jpg" alt="" class="f2">
			<img src="./img/59 .jpg" alt="" class="f2">
			<img src="./img/60 .jpg" alt="" class="f2">





			<img src="./img/61 .jpg" alt="" class="f3">
			<img src="./img/62 .jpg" alt="" class="f3">
			<img src="./img/63 .jpg" alt="" class="f3">
			<img src="./img/64 .jpg" alt="" class="f3">
			<img src="./img/65 .jpg" alt="" class="f3">
			<img src="./img/66 .jpg" alt="" class="f3">
			<img src="./img/67 .jpg" alt="" class="f3">
			<img src="./img/68 .jpg" alt="" class="f3">
			<img src="./img/69 .jpg" alt="" class="f3">
			<img src="./img/70 .jpg" alt="" class="f3">
			<img src="./img/71 .jpg" alt="" class="f3">
			<img src="./img/72 .jpg" alt="" class="f3">
			<img src="./img/73 .jpg" alt="" class="f3">
			<img src="./img/74 .jpg" alt="" class="f3">
			<img src="./img/75 .jpg" alt="" class="f3">
			<img src="./img/76 .jpg" alt="" class="f3">
			<img src="./img/77 .jpg" alt="" class="f3">
			<img src="./img/78 .jpg" alt="" class="f3">
			<img src="./img/79 .jpg" alt="" class="f3">
			<img src="./img/80 .jpg" alt="" class="f3">
			<img src="./img/81 .jpg" alt="" class="f3">
			<img src="./img/82 .jpg" alt="" class="f3">
			<img src="./img/83 .jpg" alt="" class="f3">
			<img src="./img/84 .jpg" alt="" class="f3">
			<img src="./img/85 .jpg" alt="" class="f3">
			<img src="./img/86 .jpg" alt="" class="f3">
			<img src="./img/87 .jpg" alt="" class="f3">
			<img src="./img/88 .jpg" alt="" class="f3">
			<img src="./img/89 .jpg" alt="" class="f3">
			<img src="./img/90 .jpg" alt="" class="f3">
			<p></p>
		</div>
	</div>
	<!--  src="JS/photo.js" -->

	<script type="text/javascript">
		var oImg = document.getElementsByClassName('f1')
		var oImg2 = document.getElementsByClassName('f2')
		var oImg3 = document.getElementsByClassName('f3')
		var len = oImg.length;
		var deg = 360 / len;

		var oWrap = document.getElementById("imgwrap");
		// var oWrap=document.querySelector('.wrap');

		//页面加载完毕在执行的代码
		window.onload = function () {
			Array.prototype.forEach.call(oImg, function (ele, index, self) {
				// 旋转并沿Z轴平移
				ele.style.transform = "rotateY(" + deg * index + "deg) translateZ(645.75px)";
				//过渡时间1s
				ele.style.transition = "1s " + (len - index) * 0.1 + "s";

			});
			Array.prototype.forEach.call(oImg2, function (ele, index, self) {
				// 旋转并沿Z轴平移
				ele.style.transform = "rotateY(" + deg * index + "deg) translateZ(645.75px) translateY(240px)";
				//过渡时间1s
				ele.style.transition = "1s " + (len - index) * 0.1 + "s";

			});
			Array.prototype.forEach.call(oImg3, function (ele, index, self) {
				// 旋转并沿Z轴平移
				ele.style.transform = "rotateY(" + deg * index + "deg) translateZ(645.75px) translateY(480px)";
				//过渡时间1s
				ele.style.transition = "1s " + (len - index) * 0.1 + "s";
			});
		}
		//翻动3D相册
		var newX, newY, lastX, lastY, minusX, minusY, rotX = -20,
			rotY = 0;


		// 定时移动函数
		function timing() {
			return setInterval(() => {
				rotY -= 1 * 0.1;
				oWrap.style.transform = "rotateX(" + rotX + "deg)  rotateY(" + rotY + "deg)";
				lastY = newY;
			}, 10);
		}

		// 开始定时移动
		var setInter = timing();

		// 鼠标摁下时
		document.onmousedown = function (e) {
			// 鼠标按下时需要暂停移动
			clearInterval(setInter)
			clearInterval(this.setInter)

			// 点击设置初值
			lastX = e.clientX;
			lastY = e.clientY;

			// 鼠标移动时
			this.onmousemove = function (e) {
				newX = e.clientX;
				newY = e.clientY;

				minusX = newX - lastX;
				minusY = newY - lastY;

				rotX += minusY * 0.2;
				rotY -= minusX * 0.1;
				oWrap.style.transform = "rotateX(" + rotX + "deg) rotateY(" + rotY + "deg)";
				lastX = newX;
				lastY = newY;
			}

			// 鼠标松开时
			this.onmouseup = function (e) {
				//鼠标松开
				this.onmousemove = null; //清除鼠标移动
				// 松开时触发定时移动
				this.setInter = timing();
			}
		}
	</script>

	<!-- 调用灯笼挂件 -->
	<script src="https://cdn.jsdelivr.net/gh/fz6m/china-lantern@1.1/dist/china-lantern.min.js"></script>
</body>

</html>

展示效果:
 

3D照片墙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值