jQuery实现轮播图(二)

这里的轮播为轮播增添了一个效果,前一张图片整体碎成小块块然后上移消失,而下一张图片显示出
这里写图片描述

原理为:事先创建一堆浮动的div(宽高一样,布满整个背景box,这里的box包含着图片)然后为每一个div添加背景图片,使用background-position可以为每一个div取出同一张图片的对应位置的图样作为背景,然后就可以分别控制各div的运动来达到效果


这里也改变了一下轮播点击按钮的运动样式
这里写图片描述

点击圆扭时有一个小球会运动到当前按钮上,具有了动态感。实现创建一个div设置为运动的白球,绝对定位,点击按钮时候给予对应的运动便可

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="js/jquery-3.0.0.min.js"></script>
    <script>
        $(function (){
            var num=1;
            //创建DOM元素
            creatBlock(1);

            function creatBlock(num){//创建一堆div,设置样式
                for(var i=0;i<72;i++)
                {
                    var oblock=$("<div></div>");
                    oblock.css({
                        "width":"100px",
                        "height":"100px",
                        "position":"absolute",
                        "left":i%12*100+"px",
                        //通过简单的算法设置位置和取对应位置的图片
                        "top":Math.floor(i/12)*100+"px",
                        "backgroundImage":"url(./images/"+num+".jpg)",
                        "backgroundPosition":-i%12*100+"px "+(-Math.floor(i/12)*100)+"px",
                        "backgroundSize":"1200px 600px",
                    });
                    oblock.addClass("smallblock");
                    $(".block").append(oblock);//添加到box背景中
                }
            }

            function animatelinearleft()
            {
                num++;//使用全局num控制图片背景的变换
                //*
                $(".block").css({"backgroundImage":"url(./images/"+num+".jpg)"});
                $(".smallblock").each(function (index) {//遍历每个div添加事件
                    //随机给各div不同的运动距离
                 $(".smallblock").eq(index).stop().animate({"top":-(Math.random()*(72-index))*100+"px","opacity":"0"},500,function(){
                        $(this).css({
                        //设置回调函数改变各div的背景图(用num控制图片,由于上一个图片的各div运动完才能为div的背景改变为新图片的,所以中间会有一个空白期,因此我们在“*”处编写代码让block大背景先变为下一张图,过程是个动态的但是用户看不出来)
                            "left":index%12*100+"px",//初始化每个div的位置
                            "top":Math.floor(index/12)*100+"px",
                            "opacity":1,
                            "backgroundImage":"url(./images/"+num+".jpg)"})//改变背景
                    });
                });
            }


            $(".div_list").each(function (index) {//控制圆点按钮的运动
                $(this).click(function () {
                    num=index;
                    $(".black_nav").stop().animate({"top":202+(index*46)+"px"},500);
                    animatelinearleft();
                    console.log(this.offsetTop)
                });
            })


        });
    </script>
    <style>
        *{
            padding: 0px;
            margin: 0px;
        }
        .block
        {
            position: relative;
            width: 1200px;
            height: 600px;
            margin: 0 auto;
            margin-top: 100px;
            overflow: hidden;
            background-size: 1200px 600px;
        }
        .nav{
            position: absolute;
            z-index: 9999;
            top: 50%;
            left: 20px;
            margin-top: -120px;
        }
        .div_list{
            width: 20px;
            height: 20px;
            border: 3px solid white;
            border-radius: 50%;
            margin-top: 20px;
            cursor: pointer;
        }
        .black_nav{
            width: 22px;
            height: 22px;
            border-radius:50%;
            background: white;
            cursor: pointer;
            left: 22px;
            top:202px ;
            z-index: 10000;
            position: absolute;
        }
    </style>
</head>
<body>
<div class="block">
    <div class="nav">
        <div class="div_list"></div>
        <div class="div_list"></div>
        <div class="div_list"></div>
        <div class="div_list"></div>
    </div>
    <div class="black_nav"></div>
</div>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值