3D动态相册

3D动态相册

闲来没事做,就写一下3D拖拽相册吧,图片可自由更换,主要是学习js基础!先来看看效果吧,当然是静态的,可以拖拽,废话少说,上图:
在这里插入图片描述在这里插入图片描述
首先当然是要学习布局,不知道布局的话,根本就下不了手!布局就是以中间的DIV为准,随后进行样式的书写,具体布局也说不清楚,希望能看得懂代码吧!
CSS样式:

*{margin: 0;padding: 0;}
		body{
			background: #000;
			overflow: hidden;
			user-select:none;
		}
		#perspective{
			perspective:800px;
		}
		#wrap{
			position: relative;
			width: 133px;
			height: 200px;
			margin: 150px auto;
			box-shadow: 0 0 8px #f9f;
			transform-style: preserve-3d;
			transform: rotateX(-15deg) rotateY(0deg);
		}
		#wrap .img{
			width: 133px;
			height: 200px;
			box-shadow: 0 0 8px #f9f;
			position: absolute;
			list-style: none;
		}
		#wrap img{
			position: absolute;
			width: 133px;
			height: 200px;
			filter: blur(1px);
			transition: 1s;
			-webkit-box-reflect: below 5px -webkit-linear-gradient(top,rgba(0,0,0,0) 30%,rgba(0,0,0,.5) 100%);
		}
		#wrap img:hover{
			filter: blur(0px);
			transform: scale(1.2);
		}

body部分:

<div id="perspective">
		<div id="wrap">
			<div>
				<img src="images/1.jpg" alt="">
			</div>
			<li class="img">
				<img src="images/1.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/2.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/3.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/4.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/5.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/6.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/7.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/8.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/9.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/10.jpg" alt="">
			</li>
			<li class="img">
				<img src="images/11.jpg" alt="">
			</li>
		</div>
	</div>

JS部分:

//最重要的部分
var oImg = document.getElementsByClassName("img");
		var deg = 360/oImg.length;
		window.onload = function(){
			for(var i = 0; i < oImg.length;i++){
				oImg[i].style.transform = "rotateY("+deg*i+"deg) translateZ(350px)";
				oImg[i].style.transition = "1s "+(oImg.length-i)*0.1+"s";
			}
		}
		var newX,newY,sX,sY,lX,lY,rotateX = -15,rotateY = 0;
		var oWrap = document.getElementById("wrap");
		document.onmousedown = function(event){
			lX = event.clientX;
			lY = event.clientY;
			this.onmousemove = function(event){
				newX = event.clientX;
				newY = event.clientY;
				
				sX = newX - lX;/*求两次移动距离差*/
				sY = newY - lY;
				
				rotateX -= sY*0.2; 
				rotateY += sX*0.1;
				
				oWrap.style.transform=" rotateX("+rotateX+"deg) rotateY("+rotateY+"deg)";

				//当新的值用完就变成旧的值
				lX = newX;
				lY = newY;
			}
			this.onmouseup = function(event){
				this.onmousemove = null;
				var timer = setInterval(function(){
					sX *= 0.95;
					sY *= 0.95;
					
					rotateX -= sY*0.2; 
					rotateY += sX*0.1;
					
					oWrap.style.transform=" rotateX("+rotateX+"deg) rotateY("+rotateY+"deg)";
					
					if(Math.abs(sX) < 0.1 && Math.abs(sY) < 0.1){
						clearInterval(timer);
					}
				},13);
			}
		}

好了,这样一个帅气的3D拖拽相册就圆满完工了!!

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,下面是一个简单的樱花雨3D动态相册的代码示例,使用了Three.js库实现: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>樱花雨3D动态相册</title> <style> body { margin: 0; padding: 0; overflow: hidden; } </style> </head> <body> <script src="https://cdn.jsdelivr.net/npm/three@0.131.1/build/three.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/three@0.131.1/examples/js/controls/OrbitControls.js"></script> <script> // 创建场景、相机、渲染器 const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 30; const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建相册模型 const album = new THREE.Object3D(); scene.add(album); // 创建樱花花瓣材质 const petalTexture = new THREE.TextureLoader().load('https://threejs.org/examples/textures/particles/particle2.png'); const petalMaterial = new THREE.SpriteMaterial({ map: petalTexture, color: 0xffffff }); // 创建樱花花瓣 const petals = []; for (let i = 0; i < 100; i++) { const petal = new THREE.Sprite(petalMaterial); petal.position.set(Math.random() * 50 - 25, Math.random() * 50 - 25, Math.random() * 50 - 25); petal.scale.set(2, 2, 2); petals.push(petal); album.add(petal); } // 创建相册盒子 const boxGeometry = new THREE.BoxGeometry(10, 10, 10); const boxMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true }); const box = new THREE.Mesh(boxGeometry, boxMaterial); album.add(box); // 创建相机控制器 const controls = new THREE.OrbitControls(camera, renderer.domElement); // 渲染循环 function animate() { requestAnimationFrame(animate); // 更新樱花花瓣位置 for (let i = 0; i < petals.length; i++) { const petal = petals[i]; petal.position.y -= 0.1; if (petal.position.y < -25) { petal.position.y = 25; } } // 更新相机控制器 controls.update(); // 渲染场景 renderer.render(scene, camera); } animate(); </script> </body> </html> ``` 以上代码中,我们使用了Three.js库创建了场景、相机和渲染器,然后创建了相册模型和樱花花瓣,并将它们添加到场景中。接着创建了相机控制器和渲染循环,并在渲染循环中更新了樱花花瓣的位置,以及相机控制器的状态。最后调用渲染器的render方法渲染场景。注意,这里的樱花花瓣只是简单的使用Sprite精灵实现,实际效果可能需要更加复杂的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值