【3D卡片切换】基于jquery实现3D堆叠卡片切换效果(附完整源码)



写在前面

其实3D卡片堆叠切换效果,从我入前端坑以来就一直喜欢的一种轮播效果,以前也有相关整理的,总是有其他琐事给耽搁了,这不趁着周四给大家整理一下基于jquery如何实现3D卡片切换效果的。这篇文章主要讲的是实现的过程,希望能够给你们带来启发。

涉及知识点

Jquery如何实现卡片堆叠轮播切换,如何实现3D图文卡片堆叠轮播效果,js实现3D卡片堆叠切换效果,3D卡片堆叠轮播demo。
版权声明:此文原创于CSDN博主-《拄杖盲学轻声码》,主页有很多分享的代码,期待您的访问。

实现效果

这个主要为了给大家一个最终实现效果的反馈,文尾附完整代码包的分享链接。
在这里插入图片描述

1、搭建页面

1.1 创建ul li节点

首先我先创建一个节点,我采用的是浮动布局的方式,主要通过设置样式和html,其中效果如下所示:
在这里插入图片描述

1.2 丰富元素

从A步骤我们就已经创建好了一个容器,接下来就是在里面放东西,首先我想到的是标题部分、图片部分、个人基本信息及简介部分。

Html代码所示

<div class="lb_gl">
        <div class="container">
            <h1 class="turn_3d">原创于CSDN博主-《拄杖盲学轻声码》</h1>
            <div class="pictureSlider poster-main">
                <!-- <div class="poster-btn poster-prev-btn"></div> -->
                <ul id="hdpturn" class="poster-list">
                    <li class="poster-item hdpturn-item">
                        <p class="xxgy">黄大大</p>
                        <p class="say">拄杖盲学轻声码</p>
                        <div class="for_btn">
                            <img src="img/a0.png" width="100%">
                            <a href="#" class="in_page"><img src="images/iconin.png"></a>
                        </div>
                        <div class="students_star">
                            <p class="cell_list"><span class="lf">姓名:<span class="darks">黄大大</span></span> <span
                                    class="rt">薪资 :<span class="darks">21k</span></span>
                            </p>
                            <p class="cell_list"><span>入职:<span class="darks">向前看,向钱看</span></span>
                            </p>
                            <div class="zwjs">
                                自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展
                            </div>
                        </div>
                    </li>
                </ul>
            </div>
        </div>

    </div>

CSS代码所示

/*轮播*/
// 原创于CSDN博主-《拄杖盲学轻声码》
.lb_gl {
    
    
    margin-bottom: 30px;
    background: url(../images/bg_3d.png);
    background-size: 100% 100%;
    height: 725px;
}

.container {
    
    
    width: 1024px;
    margin: 0 auto;
    position: relative;
}

.pictureSlider {
    
    
    height: 518px;
    margin-bottom: 24px;
}

.poster-item {
    
    
    background: #fefefe;
    height: 453px;
    width: 336px;
    border-radius: 10px;
    border: 1px solid #666;
    padding: 45px 23px 20px 23px;
    transition: all 0.5s;
    cursor: default;
    -moz-transition: all 0.5s;
    cursor: default;
    -webkit-transition: all 0.5s;
    cursor: default;
    -o-transition: all 0.5s;
    cursor: default;
}

.turn_3d {
    
    
    text-align: center;
    color: #999;
    font-weight: 400;
    font-size: 36px;
    padding: 28px 0;
}

.xxgy {
    
    
    font-size: 30px;
    font-weight: 900;
    padding-left: 10px;
}

.poster-item .say {
    
    
    font-size: 18px;
    margin-bottom: 5px;
    padding-left: 10px;
}

.students_star {
    
    
    padding: 10px 10px 0 10px;
}

.cell_list {
    
    
    margin-bottom: 20px;
    color: #999;
    font-size: 18px;
    overflow: hidden;
}

.darks {
    
    
    color: #000;
    padding-left: 10px;
}

.zwjs {
    
    
    border-top: 1px solid #d0cddb;
    line-height: 26px;
    padding-top: 5px;
    color: #999;
    font-size: 12px;
    max-height: 84px;
    overflow: hidden;
}

.for_btn {
    
    
    position: relative;
    height: 214px;
    overflow: hidden
}

.in_page {
    
    
    position: absolute;
    left: 50%;
    top: 50%;
    width: 40px;
    height: 40px;
    margin-left: -20px;
    margin-top: -20px;
}

.in_page>img {
    
    
    width: 40px;
    height: 40px;
}

.check_more {
    
    
    width: 180px;
    height: 50px;
    line-height: 50px;
    text-align: center;
    color: #fff;
    background: #bc241d;
    margin: 0 auto;
    display: block;
}

页面实现效果
在这里插入图片描述

2、JS实现堆叠切换

因为是多个贴片,如果按照正常人去写的话估计就是复制粘贴,然后形成堆叠状态,但是博主不是正常人,所以我想着模拟后台返回数据(用假数据),然后采用遍历的方式去赋值实现多个卡片堆叠的效果,于是乎实现代码如下:

var aa;
        $(function () {
    
    
            //动态加载元素
            var _keyData = [{
    
    
                name: "黄大大",
                money: "21k",
                tiptxt: "拄杖盲学轻声码",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄小小",
                money: "22k",
                tiptxt: "何惧风飞沙",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄大中",
                money: "23k",
                tiptxt: "天地无涯",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄大小",
                money: "21.5k",
                tiptxt: "谁怕,一蓑烟雨任平生",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄小小",
                money: "21.5k",
                tiptxt: "拄杖盲学轻声码",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄中小",
                money: "21.5k",
                tiptxt: "一生有爱",
                ming: "向前看,向钱看",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }, {
    
    
                name: "黄中中",
                money: "21.5k",
                ming: "向前看,向钱看",
                tiptxt: "拄杖盲学轻声码",
                textar: "自我介绍:90后的阳光开朗大男孩,喜欢在CSDN(拄杖盲学轻声码)上写写文章,爱舞蹈,喜编程,好诗赋,奔名企,求发展"
            }];
            var kstr = "";
            for (var k = 0; k < _keyData.length; k++) {
    
    
                kstr += `<li class="poster-item hdpturn-item">
                        <p class="xxgy">`+ _keyData[k].name + `</p>
                        <p class="say">`+ _keyData[k].tiptxt + `</p>
                        <div class="for_btn">
                            <img src="img/a`+ k + `.png" width="100%">
                            <a href="#" class="in_page"><img src="images/iconin.png" /></a>
                        </div>
                        <div class="students_star">
                            <p class="cell_list"><span class="lf">姓名:<span class="darks">`+ _keyData[k].name + `</span></span> <span
                                    class="rt">薪资 :<span class="darks">`+ _keyData[k].money + `</span></span>
                            </p>
                            <p class="cell_list"><span>入职:<span class="darks">`+ _keyData[k].ming + `</span></span>
                            </p>
                            <div class="zwjs">
                                `+ _keyData[k].textar + `
                            </div>
                        </div>
                    </li>`;
            }
            $("#hdpturn").html("").html(kstr);
            aa = new hdpturn({
    
    
                id: "hdpturn",
                opacity: 0.9,
                width: 382,
                Awidth: 1024,
                scale: 0.9
            })
        })

其中不难发现里面还有一个hdpturn函数,这个当然是我自己去封装的,需要引入hdpturn.js具体封装代码如下(文尾有完整代码包):

(function (win, doc, undefined) {
    
    
    var hdpturn = function (turn) {
    
    
        this.turn = turn
        this.hdpturn = $("#" + turn.id)
        this.X = 0
        this.hdpturnitem = this.hdpturn.children(".hdpturn-item")
        this.num_li = this.hdpturnitem.length//轮播元素个数 hdpturnPy为每个的偏移量
        this.hdpturnPy = turn.Awidth / (this.num_li - 1)
        this.init()
        this.turn_()
        return this
    }
    hdpturn.prototype = {
    
    
        constructor: hdpturn,
        init: function () {
    
    
            var _self = this;
            this.hdpturn.children(".hdpturn-item").each(function (index, element) {
    
    
                //index是第几个元素 X是选取的中间数 num_li是总数
                var rt = 1//1:右侧:-1:左侧
                if ((index - _self.X) > _self.num_li / 2 || (index - _self.X) < 0 && (index - _self.X) > (-_self.num_li / 2)) {
    
     rt = -1 }//判断元素左侧还是右侧
                var i = Math.abs(index - _self.X);//取绝对值
                if (i > _self.num_li / 2) {
    
     i = parseInt(_self.X) + parseInt(_self.num_li) - index; }//i:是左或者右的第几个
                if ((index - _self.X) < (-_self.num_li / 2)) {
    
     i = _self.num_li + index - _self.X }
                $(this).css({
    
    
                    'position': 'absolute',
                    'left': '50%',
                    'margin-left': -_self.turn.width / 2 + _self.hdpturnPy * rt * i + "px",
                    'z-index': _self.num_li - i,
                    'opacity': Math.pow(_self.turn.opacity, i),
                    'transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')',
                    '-webkit-transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')',
                    '-webkit-transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')',
                    '-moz-transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')',
                    '-ms-transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')',
                    '-o-transform': 'scale(' + Math.pow(_self.turn.scale, i) + ')'
                })
                $(this).attr("data_n", index)
            })
        },
        turn_: function () {
    
    
            var _self = this
            this.hdpturnitem.click(function () {
    
    
                _self.X = $(this).attr("data_n")
                _self.init()
            })
        },
        prev_: function () {
    
    
            var _self = this
            this.X--
            if (this.X < 0) {
    
     this.X = this.num_li - 1 }
            this.init()
        },
        next_: function () {
    
    
            var _self = this
            this.X++
            if (this.X >= this.num_li) {
    
     this.X = 0 }
            this.init()
        }
    }
    win.hdpturn = hdpturn;
}(window, document))

最终实现效果如下:
在这里插入图片描述

3、源码分享

3.1 百度网盘

链接:https://pan.baidu.com/s/1coCkeOlHV3zxxU9vTGuwOw
提取码:hdd6

3.2 123云盘

链接:https://www.123pan.com/s/ZxkUVv-0xI4.html
提取码:hdd6

3.3 邮箱留言

评论区留下您的邮箱账号,博主看到第一时间发给您,祝您生活愉快!


总结

以上就是今天要讲的内容,本文主要介绍了基于jquery实现3D卡片堆叠轮播切换的特效,实现轮播切换的过程,js如何实现3D叠加卡片轮播切换,3D叠加卡片轮播切换的demo,也期待大家一起进步哈,2023年一起加油!!!

版权声明:此文原创于CSDN博主-《拄杖盲学轻声码》,主页有很多分享的代码,期待您的访问。

猜你喜欢

转载自blog.csdn.net/hdp134793/article/details/132182465