实现划桨板块的自动轮播

这个效果主要应用了3D旋转的效果。通过背景图的切割来改变图片。

<style> *{ margin: 0; padding: 0; } body{ perspective:880px;/*视镜*/ } .box{ /*overflow:hidden;*/ width:1000px; height:500px; margin:100px auto; } .box div{ float:left; width:500px; height:500px; } .box div p{ width:500px; height: 100px; position: relative; transform-style:preserve-3d; } .box div p span{ width:500px; height: 100px; position: absolute; left: 0; top: 0; -webkit-background-size:1000px 500px; background-size:1000px 500px; background:#333; } .box div p .contrary{ transform:rotateY(180deg); } </style>

body部分

<div class="box">
    <div class="left">
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
    </div>
    <div class="right">
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
        <p>
            <span class="front"></span>
            <span class="contrary"></span>
        </p>
    </div>
</div>

js部分

<script type="text/javascript">
    var box=document.querySelector(".box");
    var box_leftp=document.querySelectorAll(".left p");
    var box_rightp=document.querySelectorAll(".right p");
    var n=0;
    var reg=[0,0,0,0,0];
    //添加图片的数组,这里写入图片的路径。
    //开始和最后一个是同一张图片。
    var arrImg=["images/1.jpg","images/2.jpg","images/3.jpg","images/4.jpg","images/5.jpg","images/1.jpg"]
    //设置初始的值
    for(var i=0;i<box_leftp.length;i++){
            //添加图片在正反两面的图,利用背景切割图片。
            //这里是左边的一部分切割的图。利用变量来实现背景位置的变化这是正面的部分
            box_leftp[i].querySelector(".front").style.cssText="background-image:url("+arrImg[n]+");background-position:0px "+i*-100+"px;background-size:1000px 500px;";
            //这里是左边的反面图片
            box_leftp[i].querySelector(".contrary").style.cssText="background-image:url("+arrImg[n+1]+");background-position:0px "+i*-100+"px;background-size:1000px 500px;";
            //这里是右边的正面图片
            box_rightp[i].querySelector(".front").style.cssText="background-image:url("+arrImg[n]+");background-position:-500px "+i*-100+"px;background-size:1000px 500px;";
            //这里是右边的反面图片
            box_rightp[i].querySelector(".contrary").style.cssText="background-image:url("+arrImg[n+1]+");background-position:-500px "+i*-100+"px;background-size:1000px 500px;";
        }
    setInterval(autoplay,4000);
    function autoplay(){
        for(var j=0;j<reg.length;j++){
            reg[j]=0;
        }
        //每一次调用都还原原来的样子。并且图片通过数组来改变下一个版面的两张图
        for(var i=0;i<box_leftp.length;i++){
            box_leftp[i].querySelector(".front").style.cssText="background-image:url("+arrImg[n]+");background-position:0px "+i*-100+"px;background-size:1000px 500px;";
            box_leftp[i].querySelector(".contrary").style.cssText="background-image:url("+arrImg[n+1]+");background-position:0px "+i*-100+"px;background-size:1000px 500px;";
            box_rightp[i].querySelector(".front").style.cssText="background-image:url("+arrImg[n]+");background-position:-500px "+i*-100+"px;background-size:1000px 500px;";
            box_rightp[i].querySelector(".contrary").style.cssText="background-image:url("+arrImg[n+1]+");background-position:-500px "+i*-100+"px;background-size:1000px 500px;";
        }
        //还原初始的角度
        for(var j=0;j<=4;j++){
            box_leftp[j].style.cssText="transform:rotateY("+reg[j]+"deg)";
            box_rightp[j].style.cssText="transform:rotateY("+-reg[j]+"deg)";
        }
        //图片的坐标加一
        n++;
        //当图片到最一张后就返回原来的位置
        if(n>=arrImg.length-1){
            n=0;
        }

        //设置过度的动画使其动画轮播改变图片
        var t=setInterval(function(){
            //这里设置每个板块开始旋转时间不同步。
            //以实现图片板块的不同的样子转过来。
            reg[0]-=18;
            if(reg[0]<=-180){
                reg[0]=-180
            }
            if(reg[0]<=-36){
                reg[1]-=18;
                if(reg[1]<=-180){
                    reg[1]=-180
                }
            }
            if(reg[1]<=-36){
                reg[2]-=18;
                if(reg[2]<=-180){
                    reg[2]=-180
                }
            }
            if(reg[2]<=-36){
                reg[3]-=18;
                if(reg[3]<=-180){
                    reg[3]=-180
                }
            }
            if(reg[3]<=-36){
                reg[4]-=18;
                if(reg[4]<=-180){
                    reg[4]=-180;
                    clearInterval(t)
                }
            }
            //角度旋转的动画。
            for(var l=0;l<=4;l++){
            box_leftp[l].style.cssText="transform:rotateY("+reg[l]+"deg)";
            box_rightp[l].style.cssText="transform:rotateY("+-reg[l]+"deg)";
            }
        },100)
    }
</script>

 

posted on 2017-03-21 22:20  乘封  阅读(117)  评论(0编辑  收藏  举报

导航