3D图片旋转轮播

先上效果图:

3D图片旋转轮播_第1张图片

分析:
看效果图,其实是好多些长方体在旋转。效果中一共有4幅图,把每幅图都切割成一长条一长条,然后这四幅图的每一长条都拼接成一个长方体,进行旋转变换。

html模板:

结合之前的3D立方体效果。将代码中的一些重用代码利用.
剩下两个边用两个span标签,填充黑色,来充当左右两个边。

html:

css:

.box{ width: 800px; margin: 30px auto; }

#picList{ margin:0; padding: 0; height: 360px; -webkit-perspective:800px; }

#picList li{ width: 25px; height: 360px; position: relative; list-style: none; float: left;              -webkit-transform-style: preserve-3d;
             -webkit-transform: translateZ(-180px) rotateX(0deg);
             }

#picList a{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; }

#picList a:nth-of-type(1){ background: url(img/1.jpg) no-repeat;-webkit-transform: translateZ(180px); }

#picList a:nth-of-type(2){ background: url(img/2.jpg) no-repeat; -webkit-transform-origin:top; -webkit-transform: translateZ(-180px) rotateX(90deg);  }

#picList a:nth-of-type(3){ background: url(img/3.jpg) no-repeat;  -webkit-transform: translateZ(-180px); }

#picList a:nth-of-type(4){ background: url(img/4.jpg) no-repeat; -webkit-transform-origin:bottom; -webkit-transform: translateZ(-180px) rotateX(-90deg); }

#picList span{ width: 360px; height: 360px; background-color: #333; position: absolute; top: 0; }

#picList span:nth-of-type(1){ left: 0; -webkit-transform-origin: left; -webkit-transform:translateZ(180px) rotateY(90deg); }

#picList span:nth-of-type(2){ right: 0; -webkit-transform-origin: right; -webkit-transform:translateZ(180px) rotateY(-90deg);  }

此时,效果图如下:

3D图片旋转轮播_第2张图片

那接下去就是通过js代码将图片完整显示出来。

window.onload = function(){

    var oPicList = document.getElementById("picList");
    var iLiW = 25;
    var sHtml = "";
    var iLength = oPicList.clientWidth/iLiW;


    for(var i=0; i

此时,效果如下图:

3D图片旋转轮播_第3张图片

可以看出有一个问题:

从中间分开,右边的每个 li 元素中的左边黑色面都显示出来了。

原因:

li 元素使用 position属性为relative,后面的元素层级会比前面的高。

第二个li元素会覆盖第一个元素右侧黑边; 第三个会遮住第二个的右侧黑边 ......

到中间分开了。右边的 第二个元素左侧黑边遮住了第一个元素 ......
所以黑边出来了。

解决办法:

以中间为分界点。左边的层级越来越高。右边的li元素层级越来越低。

这样,右侧的每个 li 元素的黑边因为层级比前一个元素弱所以被前一个元素遮住了。

所以通过js设置样式,给style标签设置 id 值,并定义一个ostyle 变量,通过它来设置style样式。

var oCss = document.getElementById("css");
var oStyle = "";
var index = 0;

for(var i=0; iiLength/2?index--:index++;

        oStyle += "#picList li:nth-of-type(" +(i+1)+ "){ z-index: " +index+ "}";
        oStyle += "#picList li:nth-of-type(" +(i+1)+ ") a{ background-position: -" +i*iLiW + "px 0px; }";

        sHtml += '
  • '; } oPicList.innerHTML=sHtml; oCss.innerHTML += oStyle;

    此时,效果如图:

    3D图片旋转轮播_第4张图片

    我们旋转45度看一下效果:

    3D图片旋转轮播_第5张图片

    正常,接下去设置下按钮。
    html模板改进:

    1. 1
    2. 2
    3. 3
    4. 4

    css:

    #btns{ padding: 50px; height: 30px; }
    
    #btns li{ height: 30px; width: 30px; background-color: #000; color: #fff; font-size:16px; font-weight: bold; line-height: 30px; text-align:center; margin: 0 10px; border-radius: 50%; float: left; list-style: none; cursor: pointer;}
    
    #btns .active{ background-color: #f60; }
    

    效果如下:

    3D图片旋转轮播_第6张图片

    分析:

    1. 获取每个 li 元素
    2. 点击1,其实是旋转-90度;点击2,旋转-180度;点击3,旋转-270度;点击4,旋转-360度。

    js代码:

    3D图片旋转轮播_第7张图片

    3D图片旋转轮播效果结束

    不积跬步无以至千里

    你可能感兴趣的:(3D图片旋转轮播)