3D旋转 相册

news2024/12/27 12:11:46

效果展示
在这里插入图片描述
代码逻辑

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <title>3D旋转 - 相册</title>
	<style type="text/css">
		*{margin:0;padding:0;}
		body{
			background:#222;
			perspective:800px;/*景深*/
		}
		#wrap{
			position:relative;
			width:120px;
			height:180px;
			margin:auto;
			transform-style:preserve-3d;/*设置3D环境*/
		}
		#wrap img{
			position:absolute;
			width:133px;
			height:200px;
			box-shadow:0 0 10px #000;
			/*倒影:朝向 偏移*/
			-webkit-box-reflect:below 5px -webkit-linear-gradient(top,rgba(0,0,0,0) 40%,rgba(0,0,0,.5) 100%);
			border-radius:5px;/*圆角*/
			/* transform:rotateY(0deg) translateZ(0px); */
			/*transition:1s 1s;动画执行的时间 动画延迟的时间*/
		}
		#wrap p{
			position:absolute;
			left:50%;
			top:112%;
			margin-left:-600px;
			margin-top:-600px;
			width:1200px;
			height:1200px;
			border-radius:50%;
			background:-webkit-radial-gradient(center center,600px 600px,rgba(122,122,122,0.2),rgba(0,0,0,0));
			transform:rotateX(90deg);
		}
	</style>
</head>
<body>
	<div id="wrap">
		<img src="images/1.jpg" alt="" />
		<img src="images/2.jpg" alt="" />
		<img src="images/3.jpg" alt="" />
		<img src="images/4.jpg" alt="" />
		<img src="images/5.jpg" alt="" />
		<img src="images/6.jpg" alt="" />
		<img src="images/7.jpg" alt="" />
		<img src="images/8.jpg" alt="" />
		<img src="images/9.jpg" alt="" />
		<img src="images/10.jpg" alt="" />
		<img src="images/11.jpg" alt="" />
		<p></p>
	</div>
	<script type="text/javascript">
		var oWrap = document.getElementById("wrap");
		var aImg = oWrap.getElementsByTagName("img");
		//让盒子自适应的垂直居中
		function mTop(){
			//获取浏览器窗口可视区域的高度
			var H = document.documentElement.clientHeight;
			oWrap.style.marginTop = H/2 - 180 + "px"
		}
		mTop();
		window.onresize = mTop;

		//图片初始动画
		var len = aImg.length;//获取图片的个数
		
		var Deg = 360/len;//每一张图片所占的角度
		for (var i=0;i<len;i++ )
		{
			aImg[i].style.transform = "rotateY("+i*Deg+"deg) translateZ(350px)";
			aImg[i].style.transition = "1s "+(len-1-i)*0.1+"s";
		}
		//鼠标事件(按下 移动 抬起) 拖拽旋转
		var lastX,lastY,nowX,nowY,minX,minY,roX=0,roY=0,timer;
		document.onmousedown = function(ev){
			clearInterval(timer);
			var ev = ev||window.event;
			//获取鼠标按下去的坐标位置
			lastX = ev.clientX;
			lastY = ev.clientY;
			this.onmousemove = function(ev){
				var ev = ev||window.event;
				//移动过程中鼠标的坐标位置
				nowX = ev.clientX;
				nowY = ev.clientY;
				//计算出鼠标坐标的差值
				minX = nowX - lastX;
				minY = nowY - lastY;
				//计算容器旋转的角度
				roY += minX*0.2;//roY = roY + minX*0.2
				roX -= minY*0.1;
				//console.log(roX,roY);
				//让整个图片容器跟随鼠标动
				oWrap.style.transform = "rotateX("+roX+"deg) rotateY("+roY+"deg)";
				lastX = nowX;
				lastY = nowY;
			}
			this.onmouseup = function(){
				this.onmousemove = null;
				this.onmouseup = null;
				timer = setInterval(function(){
					minX *=0.95;//让minX逐渐减小
					minY *=0.95;
					roY += minX*0.2;
					roX -= minY*0.1;
					oWrap.style.transform = "rotateX("+roX+"deg) rotateY("+roY+"deg)";
					//当minX达到足够小的值时 清楚定时器
					if (Math.abs(minX)<0.1 && Math.abs(minY)<0.1)
					{
						clearInterval(timer);
					}
				},1000/60);
			}
			return false;//阻止默认事件
		}
	</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3(Vite) 通过 prism.js 实现代码高亮并实现Mac风格

prismjs漂亮的代码语法高亮插件 极致易用&#xff1a;引用 prism.css 和 prism.js&#xff0c;使用合适的 HTML5 标签&#xff08;code.language-xxxx&#xff09;&#xff0c;搞定&#xff01;天生伶俐&#xff1a;语言的 CSS 类是可继承的&#xff0c;所以你只需定义一次就能…

自动控制原理笔记-频率响应法-控制系统的频域稳定判据

目录 一、Nyquist稳定判据 1&#xff09;开环传递函数中没有积分环节&#xff08;不含s0的极点&#xff09; 2&#xff09;开环传递函数中含有积分环节&#xff08;含s0的开环极点&#xff09; 二、Bode 稳定判据 稳定的定义&#xff1a; 任何系统在扰动的作用下都会偏离原平衡…

炫技亮点 任务编排使用CompletableFuture优化业务流程

文章目录 背景CompletableFuture简介使用场景如何编排任务步骤场景一 多个任务串行执行场景二 多个步骤并行执行场景三 一个串行步骤后两个并行步骤场景四 一个步骤依赖两个并行步骤场景五 一个步骤依赖多个并行步骤同时完成场景六 一个任务依赖多个任务的任意一个完成结果 其他…

STL--stack queue deque

stack 一、stack介绍 stack是一种容器适配器&#xff0c;专门设计用于后进先出&#xff0c;其中元素仅从容器的一端插入和提取 二、stack接口 函数名称功能说明empty判断容器是否为空size返回容器容量大小top返回栈顶数据push从栈顶插入元素pop删除栈顶元素 三、stack模拟实…

【NLP开发】Python实现聊天机器人(若干在线聊天机器人)

文章目录 1、简介2、代码测试2.1 open.drea.cc2.2 api.ruyi.ai2.3 route.showapi.com2.4 api.binstd.com2.5 api.jisuapi.com2.6 api.fanyi.baidu.com2.7 aiml2.8 api.tianapi.com2.9 nlp.xiaoi.com2.10 api.qingyunke.com2.11 api.ownthink.com 结语 1、简介 AI 聊天机器人使…

Chrome远程调试

最近接触到Chrome远程调试相关内容&#xff0c;记录一下。 场景&#xff1a;使用Chrome远程调试Chromium。当能够控制目标主机执行命令之后&#xff0c;可以在该主机上建立全局代理&#xff0c;然后在自己这一边开启浏览器监听&#xff0c;接着在目标机器上执行 chrome.exe --…

使用CSS伪元素制作动感超酷的hover动画

css 有很多神奇的效果都是使用 CSS 伪元素利用视觉差来制作的&#xff0c;以前没怎么深入的研究过 css&#xff0c;这次复习 css 的知识点才恍然大悟&#xff0c;原来 css 这么 cool。 先上效果&#xff1a; 动画实现原理 这个组动画的实现原理很简单&#xff0c;前边是一个…

ptrace

前言 gdb 的核心技术就是使用 ptrace 系统调用。 ptrace NAMEptrace - process traceSYNOPSIS#include <sys/ptrace.h>long ptrace(enum __ptrace_request request, pid_t pid,void *addr, void *data);DESCRIPTIONThe ptrace() system call provides a means by w…

开关电源学习总结

本篇文章主要通过理论来大体的讲一下开关电源的设计的思考过程&#xff0c;希望对大家可以有所帮助。本人小白&#xff0c;如有质疑&#xff0c;可以评论区指出。 一、开关电源指标 1.输入电压与输入功率 在设计开关电源时&#xff0c;需要根据需求来设计输入电压和输入功率…

12 KVM虚拟机配置-配置虚拟设备(网络设备)

文章目录 12 KVM虚拟机配置-配置虚拟设备(网络设备)12.1 概述12.2 元素介绍12.3 配置示例 12 KVM虚拟机配置-配置虚拟设备(网络设备) 12.1 概述 XML配置文件可以配置虚拟网络设备&#xff0c;包括ethernet模式、bridge模式、vhostuser模式等&#xff0c;本节介绍虚拟网卡设备…

理解生成式AI

文章目录 1、专业术语2、生成式AI3、ChatGPT1. 理解LLMRNN循环神经网络Seq2Seq模型ChatGPT与Bert区别 4、模型的生成和部署 1、专业术语 LLM&#xff1a;大型语言模型 GAI&#xff1a;通用人工智能 NLP&#xff1a;自然语言处理 CNN&#xff1a;卷积神经网络 RNN&#xff…

Spark的安装和配置

Spark的安装和配置 推荐按照我的博客下载hadoop&#xff0c;spark&#xff0c;pyspark以及scala这样版本搭配更好。 如果觉得自己不会版本搭配可私聊博主。 先安装hadoop再安装spark scala的安装和配置&#xff1a;https://blog.csdn.net/weixin_41957626/article/details/1305…

集群session的共享问题

基于redis实现共享session登录 1.集群session共享的问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同tomcat服务时导致数据丢失问题 替代方案应该满足&#xff1a; 数据共享 内存存储 key、value结构 2.基于redis实现ses…

QoS实验配置-基于类部署

目录 对路由进行优先级标记 配置端口信任DSCP优先级 配置流量监管 配置拥塞管理 配置拥塞避免 配置流量整形 出接口下应用队列模板 对配置进行检验 QoS基于类的方式实现管理&#xff08;通过调度0~7队列进行实现&#xff0c;一般6、7协议是预留给路由协议的&#xff0c…

macos和windows区别 macos怎么运行windows程序

在我们使用电脑时&#xff0c;重要的是电脑内应用&#xff0c;而系统不过是运行软件的“容器”。日常生活中&#xff0c;我们常见的操作系统是macos和windows&#xff0c;那么macos和windows区别在哪&#xff1f;这两款操作系统的区别很大。macos怎么运行windows程序&#xff1…

从I帧到B帧,H.264编码技术为您构建画面与效果完美结合的视觉盛宴

H264之帧编码 H.264&#xff0c;也称为 MPEG-4 AVC (Advanced Video Coding)&#xff0c;是一种高效的视频编码标准&#xff0c;用于压缩和存储视频。H.264 利用了预测编码和变换编码等先进的技术&#xff0c;其编码流程与普通视频编码类似&#xff0c;主要包括帧类型判定、运…

2017年下半年软件设计师下午试题

试题四 阅读下列说明和C代码&#xff0c;回答问题1至问题 2&#xff0c;将解答写在答题纸的对应栏内。 【说明】 一个无向连通图G点上的哈密尔顿&#xff08;Hamiltion&#xff09;回路是指从图G上的某个顶点出发&#xff0c;经过图上所有其他顶点一次且仅一次&#xff0c;最后…

HNU-操作系统OS-实验Lab4

OS_Lab4_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 实验目的 了解内核线程创建/执行的管理过程了解内核线程的切换和基本调度过程 实验内容 lab2/3完成了物理和虚拟内存管理&#xff0c;这给创建内核线程…

C++之初识STL—vector

文章目录 STL基本概念使用STL的好处容器vector1.vector容器简介2.vector对象的默认构造函数3.vector对象的带参构造函数4.vector的赋值5.vector的大小6.vector容器的访问方式7.vector的插入 STL基本概念 STL(Standard Template Library,标准模板库)STL 从广义上分为: 容器(con…

springboot+vue音乐翻唱与分享平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的音乐网站与分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;…