案例:3D切割轮播图

一、3d转换

3D旋转套路:顺着轴的正方向看,顺时针旋转是负角度,逆时针旋转是正角度

二、代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>3D切割轮播图</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 500px;
            height: 300px;
            margin: 100px auto 0;
            border: 1px solid #ccc;
            position: relative;
        }
        .box .imageBox{
            list-style: none;
            width: 100%;
            height: 100%;
        }
        .box .imageBox li{
            width: 100px;
            height: 100%;
            float: left;
            position: relative;
            /* 3D呈现 */
            transform-style: preserve-3d;
            transition: all 1s;
        }
        .box .imageBox li span{
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: url("1.jpg") no-repeat;
        }
        /* 拼接立体容器:立体容器旋转中心在电脑平面上,每一个面的图片正面朝外 */
        .box .imageBox li span:nth-child(1){
            background-image: url("1.jpg");
            transform: translateZ(150px);
        }
        .box .imageBox li span:nth-child(2){
            background-image: url("2.jpg");
            transform: rotateX(90deg) translateZ(150px);
        }
        .box .imageBox li span:nth-child(3){
            background-image: url("3.jpg");
            transform: rotateX(180deg) translateZ(150px);
        }
        .box .imageBox li span:nth-child(4){
            background-image: url("4.jpg");
            transform:  rotateX(270deg) translateZ(150px);
        }
        /* 拼接背景 */
        .box .imageBox li:nth-child(1) span{
            background-position: 0 0;
        }
        .box .imageBox li:nth-child(2) span{
            background-position: -100px 0;
        }
        .box .imageBox li:nth-child(3) span{
            background-position: -200px 0;
        }
        .box .imageBox li:nth-child(4) span{
            background-position: -300px 0;
        }
        .box .imageBox li:nth-child(5) span{
            background-position: -400px 0;
        }
        .box .left,
        .box .right{
            position: absolute;
            top: 115px;
            width: 50px;
            height: 70px;
            background: rgba(255, 255, 0,0.1);
            text-align: center;
            line-height: 70px;
            font-size: 20px;
            color: #fff;
            text-decoration: none;
            font-weight: bold;
        }
        .box .right{
            right: 0;
        }
        .box .left{
            left: 0;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul class="imageBox">
            <!-- ,图片分五部分,五个li的第一个span放第一张图片,第二个span放第二张图片... -->
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
            <li>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </li>
        </ul>
        <a class="left" href="javascript:;">&lt;</a>
        <a class="right" href="javascript:;">&gt;</a>
    </div>
    <script src="jquery.min.js"></script>
    <script>
        $(function(){
            //点击切换图片(定义一个索引)
            var index=0;
            // 开关
            var flag=true;
            // 点击左边的按钮,上一张
            $(".left").on("click",function(){
                if(!flag) return false;
                flag=false;
                index--;
                var angle=-index*90;
                $("li").css("transform","rotateX("+ angle +"deg)").each(function(i,item){
                    // 设置不同的延时
                    $(this).css("transition-delay",i*0.25+"s");
                });
            });
            //点击右边的按钮,下一张
            $(".right").on("click",function(){
                if(!flag) return false;
                flag=false;
                index++;
                var angle=-index*90;
                $("li").css("transform","rotateX("+ angle +"deg)").each(function(i,item){
                    // 设置不同的延时
                    $(this).css("transition-delay",i*0.25+"s");
                });
            });
            //优化:重复点击的时候动画会层叠----使用节流阀flag
            $("li:last").on("transitionend",function(){
                // 最后一部分图片加载完毕
                flag=true;
            });
        });
    </script>
</body>
</html>

三、效果

猜你喜欢

转载自www.cnblogs.com/EricZLin/p/9256661.html