CSS3 3D相册

news/2024/11/17 6:19:10/

3D album.gif

今天来做一个基于CSS3 3D属性的3D相册效果。

1 基本布局

首先来完成基本布局,从效果图中可以看到,所有图片一开始均位于同一位置,然后经过不同的角度的旋转以及平移到不同的位置,达到一个”旋转散开”的效果。所以基本的思路就是:

  • 所有图片定位到页面中同一位置
  • 遍历图片,利用transform属性进行旋转、平移,加上transition制造动画效果
  • 调整perspective,改变视角

所有首先来完成基本布局:

<!DOCTYPE html>
<html><head><meta charst="utf-8"><title>3D相册</title><style>* {margin: 0px;padding: 0px;}body {background-color: #000;}.images {width: 100px;height: 100px;margin: 150px auto;position: relative;}.images img {position: absolute;box-shadow: 0px 0px 8px #eee;}</style></head><body><div class="container"><div id="warp" class="images"><img src="images/01.png"><img src="images/02.png"><img src="images/03.png"><img src="images/04.png"><img src="images/05.png"><img src="images/06.png"><img src="images/07.png"><img src="images/08.png"><img src="images/09.png"><img src="images/10.png"><img src="images/11.png"></div></div></body>
</html>

3d_album1.png

现在所有图片都重叠到了一起。

2 旋转、平移

接下来我们需要对各个图片进行旋转、平移。从图中可以看到,所有的图片都是绕Y轴进行了一定的旋转,所有首先来给各个图片加上一个旋转效果,之于旋转角度则各个图片平分:

<script>window.onload = function() {var wrap = document.getElementById('wrap');var images = document.getElementsByTagName("img");var length = images.length;var deg = 360 / length;for(var i = 0; i < length; i++) {var transform = "rotateY(" + deg * i + "deg) ";images[i].style.transform = transform;} }
</script>

3d_album2.png

可以看到,图片已经出现了不同程度的旋转,但是依然是重叠在一起的。所以接下来就是让各个图片”分开”:按Z轴方向进行平移:

    window.onload = function() {var wrap = document.getElementById('wrap');var images = document.getElementsByTagName("img");var length = images.length;var deg = 360 / length;for(var i = 0; i < length; i++) {var transform = "rotateY(" + deg * i + "deg) tranlateZ(240px)";images[i].style.transform = transform;} }

3d_album3.png

可以看到,图片进行了平移,也达到了”展开”的效果,但由于均处于同一平面,从用户角度观察,依然存在重叠。

3 改变视角

为了解决重叠问题,需要改变视角,这时就需要用到perspective + transform

  • 利用perspective指定视角距离
  • 然后通过旋转改变视角
  • 另外由于视角的改变,在进行transform时需要设定transform-style
.container {perspective: 1000px; /*perspective属性指定了观察者与Z=0平面的距离*/}.images {width: 100px;height: 100px;margin: 150px auto;position: relative;transform: rotateX(-50deg) ;transform-style: preserve-3d;
}

3d_album4.png

可以看到,图片已经均匀展开了。

4 动画效果

最后我们再来给图片的运动加上动画效果:transition属性上场了。为了然动画看起来不凌乱,我们可以通过transition中的延迟来完成:

window.onload = function() {var wrap = document.getElementById('wrap');var images = document.getElementsByTagName("img");var length = images.length;var deg = 360 / length;for(var i = 0; i < length; i++) {var transform = "rotateY(" + deg * i + "deg) translateZ(240px)";var transition = "1s " + 0.2 * i + "s";  // 通过延迟让图片运动排队images[i].style.transform = transform;images[length - i - 1].style.transition = transition;} 
}

大功告成!


http://www.ppmy.cn/news/789659.html

相关文章

xapian的使用

1、先来看一下Xapian的介绍&#xff1a; Xapian的官方网站是http://www.xapian.org&#xff0c;这是一个非常优秀的开源搜索引擎项目&#xff0c;搜索引擎其实只是一个通俗的说法&#xff0c;正式的说法其实是IR&#xff08;Information Retrieval&#xff09;系统。Xapian的Li…

HTML-网页-3D旋转相册-创意相册

HTML-网页-3D旋转相册 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>3D旋转相册</title><style>*{margin: 0;padding: 0;}html,body{height: 100%;}body{overflow: h…

Android 7.0 适配相机及裁剪图片

Android 7.0调用相机及裁剪图片,还有动态权限 简书&#xff1a;Android 7.0 文件读取适配&#xff0c;及适配相机及裁剪图片 Demo挂载在码云上 码云链接 Github代码 华为荣耀V8和小米5测试通过&#xff0c;其他机子没机会测试。。。。 因为公司项目需要能修改头像功能&…

HTML旋转相册

✅作者简介&#xff1a;大家好我是每天都要敲代码&#xff0c;一位材料转码农的选手&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;个人主页&#xff1a;每天都要敲代码的个人主页 &#x1f4ac;在我们学习的过程中&#xff0c;肯定需要刷题&#xf…

H5实现拍照及相册图片上传

最近在做一个H5的小型电商项目&#xff0c;其中有一个是现金刷卡之后需要上传凭证图片的&#xff0c;因此也就需要在H5中实现可以上传图片。 我们都知道&#xff0c;input标签的type为file是可以上传图片的&#xff0c;本来想着这么简单&#xff0c;有啥难的&#xff0c;可是到…

六、NAT基础实验3——PAT配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 6.5.3 配置PAT 实验目的 学习PAT的配置方法,PC1、PC2能访问4.4.4.4的WWW 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统

HTML5+CSS3D酷炫相册

HTML5CSS3D酷炫相册 图片预览 目录结构 源码-HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"&…

HTML相册效果实现

最终实现的效果如下&#xff0c;可进入展示页面查看 展示页面&#xff1a;http://xyy9.gitee.io/roll/album.html HTML 都是一样的 div 自行复制即可 <!--相册--> <div id"albums"> <a href"day_1.html"><div class"smallpi…