CSS3 实现3D旋转木马效果

基本原理:

  • 1.首先我们需要让图片能旋转的效果,我们让所有图片绝对定位(position:absolute),共用一个中心点。
  • 2.对于舞台我们加一个视距,比如下面的demo是 perspective: 800px;
  • 3.对于容器 我们可以加一个3D视图 transform-style: preserve-3d;
  • 4. 对于图片旋转,我们要使用在旋转 rotateY,但是一圈是360度,而图片共九张,因此每一张的图片旋转的角度是40度;
  • 因此我们可以在css下这样写代码:

img:nth-child(1) { transform: rotateY( 0deg ); }
img:nth-child(2) { transform: rotateY( 40deg ); }
img:nth-child(3) { transform: rotateY( 80deg ); }
img:nth-child(4) { transform: rotateY( 120deg ); }
img:nth-child(5) { transform: rotateY( 160deg ); }
img:nth-child(6) { transform: rotateY( 200deg ); }
img:nth-child(7) { transform: rotateY( 240deg ); }
img:nth-child(8) { transform: rotateY( 280deg ); }
img:nth-child(9) { transform: rotateY( 320deg ); }

  由于共用一个中心点,所以我们可以看下如下图效果:

在3维空间中,想象一下:如果我们将每一张图片拉开到合适位置,是否就可以组成一个正九边形?

原本全部集中在中心点,拉开到六边形边上,其移动的距离及时图中的r的距离。

如何计算这个距离:

使用Math库中的tan正切函数。因为知道一条边及三个角的角度,所以:

r = 64/Math.tan(20/180 * Math.PI)

      实例:

HTML:

 1     <div class="d-rotate">
 2         <h3>3d旋转效果--点击任意图片浏览</h3>
 3         <div id="stage" class="d_stage_area">
 4             <div id="container" class="container">
 5                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010122691-69559955.jpg" width="128" height="96" id="img1"/>
 6                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010158301-1687814878.jpg" width="128" height="96" id="img2"/>
 7                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010311832-1730833656.jpg" width="128" height="96" id="img3"/>
 8                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010330816-951755840.jpg" width="128" height="96" id="img4"/>
 9                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010350285-1813069804.jpg" width="128" height="96" id="img5"/>
10                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010410801-943411344.jpg" width="128" height="96" id="img6"/>
11                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010430395-1452487381.jpg" width="128" height="96" id="img7"/>
12                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010447332-2127426646.jpg" width="128" height="96" id="img8"/>
13                 <img src="http://images2015.cnblogs.com/blog/561794/201604/561794-20160413010506613-1828415192.jpg" width="128" height="96" id="img8"/>
14             </div>
15         </div>
16     </div>

CSS:

 1 body {
 2     margin:100px;
 3     background-color:hsla(50,50%,40%,0.8);
 4 }
 5 .d-rotate {
 6     margin:10px;
 7 }
 8 .d-rotate h3 {
 9     text-align: center;
10     font-size: 1em;
11 }
12 .d_stage_area {
13     position:relative;
14     top: 0;
15     width:800px;
16     min-height: 100px;
17     padding: 100px;
18     background:#333;
19     -webkit-perspective:800px;
20     -moz-perspective: 800px;
21     perspective: 800px;
22     -webkit-transition: top .5s;
23 }
24 .d-rotate .container {
25     position: absolute;
26     left: 50%;
27     top:50%;
28     width:128px;
29     height:100px;
30     -webkit-transition: -webkit-transform 1s;
31     -moz-transition: -moz-transform 1s;
32     transition: transform 1s;
33
34     -webkit-transform-style: preserve-3d;
35     -moz-transform-style: preserve-3d;
36     transform-style: preserve-3d;
37 }
38 .d-rotate .container img {
39     position: absolute;
40     bottom: 0;
41     width:128px;
42     box-shadow: 0 1px 3px rgba(0,0,0,.5);
43     -webkit-transition: opacity 1s, -webkit-transform 1s;
44     -moz-transition: opacity 1s, -moz-transform 1s;
45     transition: opacity 1s, transform 1s;
46 }
47 .d-rotate img:nth-child(1) { transform: rotateY(   0deg ); }
48 .d-rotate img:nth-child(2) { transform: rotateY(  40deg ); }
49 .d-rotate img:nth-child(3) { transform: rotateY(  80deg ); }
50 .d-rotate img:nth-child(4) { transform: rotateY( 120deg ); }
51 .d-rotate img:nth-child(5) { transform: rotateY( 160deg ); }
52 .d-rotate img:nth-child(6) { transform: rotateY( 200deg ); }
53 .d-rotate img:nth-child(7) { transform: rotateY( 240deg ); }
54 .d-rotate img:nth-child(8) { transform: rotateY( 280deg ); }
55 .d-rotate img:nth-child(9) { transform: rotateY( 320deg ); }

JS:

 1 (function(){
 2             // css transform 变换
 3             var transform = function(element, value, key) {
 4                 key = key || "Transform";
 5                 ["Moz", "O", "Ms", "Webkit", ""].forEach(function(prefix) {
 6                     element.style[prefix + key] = value;
 7                 });
 8                 return element;
 9             };
10             var $ = function(selector) {
11                 return document.querySelector(selector);
12             };
13             // 获取元素
14             var eleStage = $("#stage"),
15                 container = $("#container");
16
17             var indexPiece = 0,
18                 htmlPic = ‘‘,
19                 arrayPic = [1, 2, 3, 4, 5, 6, 7, 8, 9],
20                 rotate = 360 / arrayPic.length;
21
22             arrayPic.forEach(function(i) {
23                 htmlPic = htmlPic + ‘<img id="img‘+ i +‘" src="./‘+ i +‘.jpg"/>‘;
24             });
25             container.innerHTML = htmlPic;
26
27
28             var transZ = 64 / Math.tan((rotate / 2 / 180) * Math.PI);
29
30             //  添加事件监听器
31             container.addEventListener("click", function() {
32                 transform(this, "rotateY("+ (-1 * rotate * ++indexPiece) +"deg)");
33             });
34
35             arrayPic.forEach(function(i, j) {
36                 transform($("#img" + i), "rotateY("+ j * rotate +"deg) translateZ("+ (transZ+15) +"px)");
37             });
38
39         })();

效果图:

点击查看在线demo演示

时间: 2024-10-08 13:18:08

CSS3 实现3D旋转木马效果的相关文章

HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/32964301 首先说明一下创意的出处:http://www.zhangxinxu.com/study/201209/pictures-3d-slide-view.html(张鑫旭的博客 ),对前台感兴趣的可以没事去看看他的博客,很给力~ 这篇博客的目的是因为上篇HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果中有个关于CSS 3D效果的比较重要的知识点没

HTML5 CSS3:诱人的3D旋转木马效果相册实例

HTML5 CSS3:诱人的3D旋转木马效果相册实例 利用HTML5和CSS3实现的3D旋转木马效果相册 下载地址:http://www.devstore.cn/code/info/341.html 运行截图: 相关下载: HTML5 Canvas火焰闪烁动画 火焰跟随鼠标 HTML5仿Apple Watch时钟动画 版权声明:本文为博主原创文章,未经博主允许不得转载.

CSS3的3D转换效果详解介绍

CSS3的3D转换效果详解介绍:本章介绍一下CSS3的3D转换效果,此效果的实现依靠的是transform属性,3D转换只是此属性的部分应用,更多相关内容可以参阅CSS3的transform属性总略介绍一章节.掌握3D转换效果,可以从三个方法作为突破口,分别是rotateX, rotateY, rotateZ,在2D变换过程中rotate()函数的应用,它表示旋转的意思,由于是2D变换,所以它只是在一个平面进行旋转,所以无需细分,具体可以参阅CSS3的2D转换效果详细介绍一章节. 下面分别介绍一

jQuery仿3D旋转木马效果插件(带索引按钮)

项目中需要用到旋转木马效果,但是我在网上找的插件,基本都是不带按钮或者只是带前后按钮的,而项目要求的是带索引按钮,也就是说有3张图片轮播,对应的要有3个小按钮,点击按钮,对应的图片位于中间位置.于是就在jQuery的一款插件jquery.carousel.js的基础上进行了一些改进,不足的是,固定就是3张图片. 代码: html <!doctype html> <html lang="zh"> <head> <meta charset=&quo

Html5+css3实现3D转动效果

由于最近一直在忙着筹划去上海工作的事情,所以博客更新的速度也就慢了下来.前几天面试了几家公司,也拿到几份offer,总结了一些面试中遇到的问题,最近整理一下会和大家一起分享.今天呢,就和大家分享一下前几天写的一个3d选转的效果.代码写的只是一个简要的demo,仅供学习使用.如果想用在项目中,还需要进一步的优化.另外,打个小广告,我和朋友一起经营的天猫商城终于开业了,是卖一些家用路由器和鼠标键盘的,有需要的朋友请猛点链接 宏正数码.好了,下面附上3d效果代码: <!doctype html> &

CSS3 实现3D旋转木马

一.transform: rotateX() rotateY() 先要将图片进行旋转. rotateX(30deg)变成了 有点难理解.附上几何图(侧面视角): rotateY(30deg): 同样的道理,几何图(顶部视角): 然后就可以将图片进行旋转,准备了8张图片需要旋转的角度为(360/8 = 45deg). <style type="text/css"> ._container{width: 300px;height: 150px;margin: 0 auto;}

css3图片3D翻转效果

点击图片看翻转效果 html结构 <div class="flip"> <div class="front"> <img src="images/img_01.jpg" alt=""> </div> <div class="back"> <img src="images/img_03.jpg" alt="&quo

手机端3d旋转木马效果+保存图片到本地

<!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"> <meta n

CSS3的3D转换translate3d(x,y,z)函数

CSS3的3D转换translate3d(x,y,z)函数:translate3d(x,y,z)只是规定3D转换的一种形式,更多相关内容可以参阅CSS3的3D转换效果详解介绍一章节.此函数用来规定指定元素在三维空间中的位移.语法结构: translate3d(x,y,z) 参数解析:1.x:表示在x轴方向的位移.2.y:表示在y轴方向的位移.3.z:表示在z轴方向的位移.代码实例:1.x轴方向的位移: <!DOCTYPE html> <html> <head> <