文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

jquery实现走马灯特效实例(扑克牌切换效果)

2024-04-02 19:55

关注

话不多说,先上大致效果:

在这里插入图片描述

本着程序员的开源精神,代码奉上:

html代码:

<div class="main-box">
    <div class="poker_box">
      <div class="pokerCaroursel poker-content" data-setting='{
        "width":1094,
        "height":338,
        "pokerWidth":488,
        "pokerHeight":338,
        "scale":0.85,
        "speed": 500,
        "autoPlay":true,
        "delay":2000,
        "verticalAlign":"middle"
                }'>
        <!-- 向左按钮 -->
        <div class="poker-btn poker-prev-btn"></div>
        <ul class="poker-list">
          <!-- 图片张数最好是基数,这样呈现的画面才好看 -->
          <li class="poker-item poker-rad">
              <div class="item">
                <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><img class="tabImg" src="images/01.jpg"></a> 
                <span class="poker-item-title">图一</span>
              </div>
          </li>
          <li class="poker-item poker-rad">
              <div class="item">
                <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><img class="tabImg" src="images/02.jpg"></a>
                <span class="poker-item-title">图二</span> 
              </div>
          </li>
          <li class="poker-item poker-rad">
            <div class="item">
              <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><img class="tabImg" src="images/03.jpg"></a>
              <span class="poker-item-title">图三</span>
            </div>
          </li>
        </ul>
        <!-- 向右按钮 -->
        <div class="poker-btn poker-next-btn"></div>
      </div>
    </div>
  </div>

注意:

script代码:

<script src="jquery.js"></script>
<script src="jquery.pokerCarousel.js"></script>
<script>
pokerCaroursel.init($('.pokerCaroursel'))
</script>	

注意:
要记得先引入jquery.js文件(可去官网下载:https://jquery.com/download/),再引入jquery.pokerCarousel.js文件

jquery.pokerCarousel.js文件完整代码:


var MIDDLE_PIC_POS = 1

//计算如何用最短的距离移动到目标
//由于有两种移动方式,向左边移动或者像右边移动,只需要在这两种方式中选择一个小的就行了

;(function($){
    var pokerCaroursel = function (caroursel){
        var self = this;
        this.caroursel = caroursel;
        this.pokerList = caroursel.find(".poker-list");
        this.pokerItems = caroursel.find(".poker-item");
        this.firstpokerItem = this.pokerItems.first();
        this.lastpokerItem = this.pokerItems.last();
        this.prevBtn = this.caroursel.find(".poker-prev-btn");
        this.nextBtn = this.caroursel.find(".poker-next-btn");

        this.buttonItems = caroursel.find(".tabBtn");

        //每个移动元素的位置索引,用于记录每个元素当前的位置,在每次移动的时候,该数组的值都会发生变化
        //数组的下标对应li元素的位置索引
        this.curPositions = [];
        for(var i = 0;i<this.pokerItems.length;++i){
            this.curPositions[i] = i+1;
        }

        this.setting = {
            "width":"1106",
            "height":"340",
            "pokerWidth":"488",
            "pokerHeight":"340",
            "scale":"0.8",
            "speed":"1000",
            "isAutoplay":"true",
            "dealy":"2000"
        };

        $.extend(this.setting,this.getSetting());

        this.setFirstPosition();

        this.setSlicePosition();

        this.refreshCss();

        this.rotateFlag = true;
        this.prevBtn.bind("click",function(){
            if(self.rotateFlag){
                self.rotateFlag = false;
                self.rotateAnimate("left")
            }
        });

        this.nextBtn.bind("click",function(){
            if(self.rotateFlag){
                self.rotateFlag = false;
                self.rotateAnimate("right")
            }
        });

        //绑定位置按钮事件

         this.buttonItems.each(function(index){
             var _this = $(this);
             _this.click(function(){
                 self.clickPosButtonIndex(index);
             })
         });

        if(this.setting.isAutoplay){
            this.autoPlay();
            this.caroursel.hover(function(){clearInterval(self.timer)},function(){self.autoPlay()})
        }
    };
    pokerCaroursel.prototype = {
        autoPlay:function(){
          var that = this;
          this.timer =  window.setInterval(function(){
              that.nextBtn.click();
          },that.setting.dealy)
        },


        refreshCss:function(){
            var that= this;
            var curFirstPos;//当前位于中间的li元素位置
            this.buttonItems.each(function(index){
                var _this = $(this);
                var curPos = that.curPositions[index];
                if(curPos == 1){
                    _this.addClass('poker-btn-active');
                }
                else{
                    _this.removeClass('poker-btn-active');
                }
            });
        },

        //记录每次移动的状态
        refreshPositions:function(offset){
            for(var i = 0; i < this.curPositions.length; ++i)
            {
                var nextPos = this.curPositions[i] + offset;
                if (nextPos > this.curPositions.length) {//移动超过末尾,则位置变成到开头
                    nextPos = nextPos - this.curPositions.length;
                }else 
                 if (nextPos < 1) {向左边移动已经移动到开始位置更左边,则位置变成结束
                     nextPos = this.curPositions.length + nextPos;
                 }
                this.curPositions[i] = nextPos;
            }
            //console.log('after refreshPositions',this.curPositions);
            this.refreshCss();
        },

         cal_move_path:function(curPos,desPos,arraySize) {
            if(curPos == desPos) return null;
            //往左边移动
             var goRightSteps;
             var goLeftSteps;
             var retDirect;
             var retStep;
             if(curPos > desPos){
                 goRightSteps = curPos - desPos;
                 goLeftSteps = desPos + (arraySize - curPos);
                 retDirect = (goRightSteps <= goLeftSteps) ? "left":"right";
                 return {"direct":retDirect,"step":Math.min(goLeftSteps,goRightSteps)};
             }
        },


        //点击位置按钮,根据点击的按钮索引 决定向左还是向右移动[因为只有三个位置,该方法能够仅靠向左或向右就能将
        //指定的位置移动到中间]
        clickPosButtonIndex:function(index){
            var self = this;
            if(self.rotateFlag == false) {//目前正在移动等移动结束后才能进入
                return;
            }

            var curPos = this.curPositions[index];
            var retPath = this.cal_move_path(curPos,MIDDLE_PIC_POS,this.curPositions.length);
            if (retPath == null){
                return;
            }

            var direct = retPath.direct;
            var step = retPath.step;

            self.rotateFlag = false;
            self.rotateAnimate(direct,step)
        },

        rotateAnimate:function(type,step){
            step = step || 1;
            var that = this;
            var zIndexArr = [];
            var speed = that.setting.speed;
                this.pokerItems.each(function(){
                   var self = $(this);
                   var destPic = null;
                   var curPic = self;
                   for (var i = 0; i < step;++i){
                        if(type == "left"){// 向左边移动, 下一张图片在自己的右边,所以用next()
                            destPic = curPic.next().get(0)?curPic.next():that.firstpokerItem;
							
                        }
                        else{
                            destPic = curPic.prev().get(0)?curPic.prev():that.lastpokerItem;
                        }
                        curPic = destPic;
                    }

                    var width = destPic.css("width");
                    var height = destPic.css("height");
                    var zIndex = destPic.css("zIndex");
                    var opacity = destPic.css("opacity");
                    var left = destPic.css("left");
                    var top = destPic.css("top");
                    zIndexArr.push(zIndex);
                    self.animate({
                        "width":width,
                        "height":height,
                        "left":left,
                        "opacity":opacity,
                        "top":top
                    },speed,function(){
                        that.rotateFlag = true;
                    });
                });
                this.pokerItems.each(function(i){
                    $(this).css("zIndex",zIndexArr[i]);
					
                });

                if (type == 'right'){
                    this.refreshPositions(-step);
                }else{
                    this.refreshPositions(step);
                }
        },

        setFirstPosition:function(){
            this.caroursel.css({"width":this.setting.width,"height":this.setting.height});
            this.pokerList.css({"width":this.setting.width,"height":this.setting.height});
            var width = (this.setting.width - this.setting.pokerWidth) / 2;

            console.log(this.pokerItems.length)
            this.prevBtn.css({"width":width , "height":this.setting.height,"zIndex":Math.ceil(this.pokerItems.length/2)});
            this.nextBtn.css({"width":width , "height":this.setting.height,"zIndex":Math.ceil(this.pokerItems.length/2)});
            this.firstpokerItem.css({
                "width":this.setting.pokerWidth,
                "height":this.setting.pokerHeight,
                "left":width,
                "zIndex":Math.ceil(this.pokerItems.length/2),
                "top":this.setVertialType(this.setting.pokerHeight)
            });
        },
        setSlicePosition:function(){
            var _self = this;
            var sliceItems = this.pokerItems.slice(1),
                level = Math.floor(this.pokerItems.length/2),
                leftItems = sliceItems.slice(0,level),
                rightItems = sliceItems.slice(level),
                pokerWidth = this.setting.pokerWidth,
                pokerHeight = this.setting.pokerHeight,
                Btnwidth = (this.setting.width - this.setting.pokerWidth) / 2,
                gap = Btnwidth/level,
                containerWidth = this.setting.width;

            var i = 1;
            var leftWidth = pokerWidth;
            var leftHeight = pokerHeight;
            var zLoop1 = level;
            leftItems.each(function(index,item){
                var scale = _self.setting.scale;
                if(index==1){
                    scale = scale*scale;
                }
                leftWidth = pokerWidth * scale;
                leftHeight = pokerHeight*scale;
                $(this).css({
                    "width":leftWidth,
                    "height":leftHeight,
                    "left": Btnwidth - i*gap,
                    "zIndex":zLoop1--,
                    "opacity":2/(i+1),
                    "top":_self.setVertialType(leftHeight)
                });
                i++;
            });

            var j = level;
            var zLoop2 = 1;
            var rightWidth = pokerWidth;
            var rightHeight = pokerHeight;
            rightItems.each(function(index,item){
                var scale = _self.setting.scale;
                if(index==0){
                    scale = scale*scale;
                }
                var rightWidth = pokerWidth * scale;
                var rightHeight = pokerHeight*scale;
                $(this).css({
                    "width":rightWidth,
                    "height":rightHeight,
                    "left": containerWidth -( Btnwidth - j*gap + rightWidth),
                    "zIndex":zLoop2++,
                    "opacity":2/(j+1),
                    "top":_self.setVertialType(rightHeight)
                });
                j--;
            });
        },
        getSetting:function(){
            var settting = this.caroursel.attr("data-setting");
            if(settting.length > 0){
                return $.parseJSON(settting);
            }else{
                return {};
            }
        },
        setVertialType:function(height){
            var align = this.setting.align;
            if(align == "top") {
                return 0
            }else if(align == "middle"){
                return (this.setting.pokerHeight - height) / 2
            }else if(align == "bottom"){
                return this.setting.pokerHeight - height
            }else {
                return (this.setting.pokerHeight - height) / 2
            }
        }
    };
    pokerCaroursel.init = function (caroursels){
        caroursels.each(function(index,item){
            new pokerCaroursel($(this));
        })  ;
    };
    window["pokerCaroursel"] = pokerCaroursel;
})(jQuery);// JavaScript Document

css代码:

.main-box{ height: 352px; width:1118px;position: absolute;top: 122px;left: 32px;}
.poker_box h2 {font-size: 30px;color: #015293;font-weight: bold;text-align: center;}
.poker_box h3 {font-size: 16px;color: #015293;margin: 10px 0 35px;text-align: center;}
.poker-content {width: 1129px;position: relative;width: 100%;height: 350px!important;margin-left: auto;margin-right: auto;}
.poker-content img {display: block;box-shadow: 0px 0px 10px #222222;-webkit-box-shadow: 0px 0px 10px #222222;border: 0;}

.poker-content a, .poker-content img {display: block;width: 100%;height: 100%;border: none;}
img {border: none;display: block;}
.poker-content .poker-list {width: 1118px;height: 500px;}
.poker-content .poker-list .poker-item {width: 200px;height: 350px;position: absolute;left: 0;top: 0;}
.poker-rad{  border-radius: 20px;  overflow: hidden;}
.poker-rai{  border-radius: 20px;  overflow: hidden;}
.poker-content .poker-list .poker-item .item {position: relative;width: 100%;height: 100%;}
.poker-content .poker-btn {position: absolute;top: 0;cursor: pointer;filter: opacity(.5) brightness(1);}
.poker-content .poker-btn:hover {filter: opacity(1) brightness(2);}
.poker-content .poker-prev-btn {left: 0;}
.poker-content .poker-next-btn {right: 0;}
.poker-item-title {background:rgba(42, 42, 42, 0.8) none repeat scroll 0 0 !important;filter:Alpha(opacity=80); background:#2a2a2a;text-align: center;color: #FFF;width: 100%;height: 52px;line-height: 52px;position: absolute;bottom: 0;text-indent: 29px}

到此这篇关于jquery实现走马灯特效实例(扑克牌切换效果)的文章就介绍到这了,更多相关jquery 走马灯内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯