3D效果切割轮播图

Posted 不想掉头发啊!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3D效果切割轮播图相关的知识,希望对你有一定的参考价值。

1.难点分析

1.1如何对结构进行布局

此次代码采用的是div>ul>li>span结构。其中每一个li元素所代表的是一个结构块,而每一个span元素所代表的是这个结构中的某一个面,来显示图片

1.2如何解决连续单击下一张时出现bug

对于连续单击下一张图片时出现的bug,此代码采用添加节流阀来解决。在代码中添加一个setTimeout函数,并将其设置为每1s执行flag=true。同时在相应的点击事件执行前设置判断语句,若flag=true(上文已设置flag=true)则执行点击事件并将flag的值设置为false

2.代码展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .view{
            width: 300px;
            height: 300px;
            margin: 100px auto;
            position: relative;
        }
        ul{
            width: 100%;
            height: 100%;
            list-style: none;
            transform: rotate3d(1,1,0,-30deg);
            transform-style: preserve-3d;
        }
        ul li{
            width: 20%;
            height: 100%;
            background-color: #ccc;
            float: left;
            position: relative;
            transform-style: preserve-3d;
            transition: transform 0.5s;
        }
        ul li span{
            width: 100%;
            height: 100%;
            position: absolute;
            left: 0;
            top: 0;
        }
        ul li span:nth-of-type(1){
           background-image: url(../img/animation1.jpeg);
            transform:translateZ(150px);
        }
        ul li span:nth-of-type(2){
            background-image: url(../img/animation2.jpeg);
            transform:translateY(-150px) rotateX(90deg);
        }
        ul li span:nth-of-type(3){
            background-image: url(../img/animation3.jpeg);
            transform:translateZ(-150px) rotateX(180deg);
        }
        ul li span:nth-of-type(4){
            background-image: url(../img/animation4.jpeg);
            transform:translateY(150px) rotateX(-90deg);
        }

    /*
    设置每一个li元素的span所显示的图片的位置
    */
         ul li:nth-of-type(2) span{
             background-position: -100% 0;
         }
        ul li:nth-of-type(3) span{
            background-position: -200% 0;
        }
        ul li:nth-of-type(4) span{
            background-position: -300% 0;
        }
        ul li:nth-of-type(5) span{
            background-position: -400% 0;
        }
        .pre , .next{
            width: 60px;
            height: 60px;
            text-align: center;
            line-height: 60px;
            position: absolute;
            top: 50%;
            text-decoration: none;
            font-size: 40px;
            transform: translate(0,-50%);
            background-color: rgba(0,0,0,.1);
            color: #fff;
        }
        .pre{
            left: 0;
        }
        .next{
            right: 0;
        }
    </style>
</head>
<body>
<div class="view">
    <ul>
<!--        每一个li就是一个结构块-->
        <li>
<!--            每一个span是这个结构中的某一个面,来显示图片-->
            <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 href="javascript:;" class="pre">&lt;</a>
    <a href="javascript:;" class="next">&gt;</a>
</div>
<script src="./jquery-3.5.1.min.js"></script>
<script>
    $(function (){
    //    定义图片索引
        var index = 0;
    //    添加节流阀  true说明本次单击会有响应处理
        var flag = true;
    //    下一张
        $(".next").on("click",function (){
        if(flag==true){
            //设置节流阀
            flag = false;
            index--;
            //    下一张就是将所有的li元素围绕x旋转
            $('li').each(function (key,value){
                //    通过添加transform样式进行旋转
                $(this).css({
                    "transform":"rotateX("+(index*90)+"deg)",
                    'transition-delay':(key*0.2)+'s'
                });
            });
            setTimeout(function (){
                flag = true
            },1000)
        }
        });


    //    上一张
        $(".pre").on("click",function (){
            if(flag==true){
                //设置节流阀
                flag = false;
                index++;
                //    下一张就是将所有的li元素围绕x旋转
                $('li').each(function (key,value){
                    //    通过添加transform样式进行旋转
                    $(this).css({
                        "transform":"rotateX("+(index*90)+"deg)",
                        'transition-delay':(key*0.2)+'s'
                    });
                });
                setTimeout(function (){
                    flag = true
                },1000)
            }
        });
    });
</script>
</body>
</html>

3.效果图

在这里插入图片描述
旋转时所产生的效果
在这里插入图片描述
有需要可以点击下载资源下载

以上是关于3D效果切割轮播图的主要内容,如果未能解决你的问题,请参考以下文章

jquery 实现3d切割轮播图

带锁的3D切割轮播图

3d轮播图的效果实现

transform—切割轮播图

轮播图3D效果--roundabout(兼容IE8)升级版

featureCarousel.js 3d轮播图插件