3D旋转立方体相册

一、实现效果

点击下面六个小的图片,上面的立方体会旋转并切换成对应的图片

在这里插入图片描述

关注一下,不要下次一定呦

在这里插入图片描述

二、图片素材

6张 300*300

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

6张 100*100

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

三、代码

  • 1、index.html
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>3D立方体相框</title>

<link rel="stylesheet" href="css/reset.min.css">
<link rel="stylesheet" href="css/style.css">


</head>

<body>

<div class="cube-container">

	<div class="cube initial-position">

		<img class="cube-face-image image-1" src="images/11.jpg">
		
		<img class="cube-face-image image-2" src="images/21.jpg">
		
		<img class="cube-face-image image-3" src="images/31.jpg">
		
		<img class="cube-face-image image-4" src="images/41.jpg">
		
		<img class="cube-face-image image-5" src="images/51.jpg">
		
		<img class="cube-face-image image-6" src="images/61.jpg">

	</div>

</div>

<div class="image-buttons">

	<input type="image" class="show-image-1" src="images/12.jpg"></input>

	<input type="image" class="show-image-2" src="images/22.jpg"></input>

	<input type="image" class="show-image-3" src="images/32.jpg"></input>

	<input type="image" class="show-image-4" src="images/42.jpg"></input>

	<input type="image" class="show-image-5" src="images/52.jpg"></input>

	<input type="image" class="show-image-6" src="images/62.jpg"></input>

</div>
  

<script  src="js/index.js"></script>

</body>
</html>

  • 2、index.js
//DOM load event
window.addEventListener("DOMContentLoaded", function () {

	var cube = document.querySelector(".cube"),
	    imageButtons = document.querySelector(".image-buttons");
	var cubeImageClass = cube.classList[1];

	//Add click event listener to image buttons container
	imageButtons.addEventListener("click", function (e) {

		//Get node type and class value of clicked element
		var targetNode = e.target.nodeName,
		    targetClass = e.target.className;

		//Check if image input has been clicked and isn't the currently shown image
		if (targetNode === "INPUT" && targetClass !== cubeImageClass) {

			console.log("Show Image: " + targetClass.charAt(11));

			//Replace previous cube image class with new class
			cube.classList.replace(cubeImageClass, targetClass);

			//Update cube image class variable with new class
			cubeImageClass = targetClass;
		}
	});
});
  • 3、style.css
/*

Full-page view:

https://codepen.io/GeorgePark/full/gegavO/

*/

@import url(https://fonts.googleapis.com/css?family=Montserrat:500);

:root {
	/* Base font size */
	font-size: 10px;

	/* Border color variable */
	--border-color: #e70;
}

* {
	box-sizing: border-box;
}

body {
	font-family: "Montserrat", Arial, sans-serif;
	font-weight: 500;
	line-height: 1.5;
	text-align: center;
	min-height: 100vh;
	padding: 4rem 2rem;
	color: #fafafa;
	background-color: #080808;
}

h1 {
	font-size: 4rem;
}

h2 {
	font-size: 2rem;
	margin-bottom: 2.5rem;
}

.cube-container {
	position: relative;
	width: 30rem;
	height: 30rem;
	margin: 5rem auto 6rem;
	perspective: 100rem;
}

.cube {
	position: absolute;
	width: 100%;
	height: 100%;
	transform-style: preserve-3d;
	transition: transform 1s cubic-bezier(0.32, 0.05, 0.35, 1.6);
}

.cube-face-image {
	display: block;
	position: absolute;
	/* opacity: 0.95; */
	/* border: 0.2rem solid #fafafa; */
	box-shadow: 0 0 0.5rem #fff, 
				0 0 1.5rem var(--border-color),
				0 0 3rem var(--border-color);
}

.image-buttons {
	display: grid;
	grid-template-columns: repeat(3, auto);
	grid-gap: 1.5rem;
	justify-content: center;
}

.image-buttons input {
	border: 0.2rem solid #fafafa;
}

.image-buttons input:focus {
	outline: none;
	border: 0.2rem solid var(--border-color);
}

/* Transform images to create cube */

.image-1 {
	transform: translateZ(15rem);
}

.image-2 {
	transform: rotateX(-180deg) translateZ(15rem);
}

.image-3 {
	transform: rotateY(90deg) translateZ(15rem);
}

.image-4 {
	transform: rotateY(-90deg) translateZ(15rem);
}

.image-5 {
	transform: rotateX(90deg) translateZ(15rem);
}

.image-6 {
	transform: rotateX(-90deg) translateZ(15rem);
}

/* Transform cube to show correct image */

.cube.initial-position {
	transform: translateZ(-15rem) translateY(-2rem) rotateX(-15deg) rotateY(18deg) rotateZ(2deg);
}

.cube.show-image-1 {
	transform: translateZ(-15rem);
}

.cube.show-image-2 {
	transform: translateZ(-15rem) rotateX(180deg);
}

.cube.show-image-3 {
	transform: translateZ(-15rem) rotateY(-90deg);
}

.cube.show-image-4 {
	transform: translateZ(-15rem) rotateY(90deg);
}

.cube.show-image-5 {
	transform: translateZ(-15rem) rotateX(-90deg);
}

.cube.show-image-6 {
	transform: translateZ(-15rem) rotateX(90deg);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值