首页 > 代码库 > 幻灯-优化

幻灯-优化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>幻灯-0.0.2</title>
    <script src="http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
    <style>
    *{margin: 0;padding: 0;}
    ul li{list-style: none;}
    a{text-decoration: none;}
    .v_show{width: 960px; margin: 0 auto;position: relative;} /*此处可修改轮播图的宽度*/
    /*焦点图样式*/
    .v_content{}
    .v_content ul{border: 1px solid #999; overflow: hidden;}
    .v_content ul li{ position: relative; height: 230px;display: none;} /*此处根据需要修改幻灯的高度*/
    .v_content ul li.blo{display: block;}
    .v_content ul li img{position: absolute; left: 50%; top: 50%;}
    /*焦点按钮样式*/
    .v_caption{position: absolute; bottom: 10px; left: 0px;width: 100%;}
    .v_caption ul{overflow: hidden;}
    .v_caption ul li{ float: left;width: 20px;height: 20px; border: 1px solid #999; text-align: center;line-height: 20px;cursor: pointer; margin-right: 10px;border-radius: 100%;}
    .active{background: red; color: #FFF;}
    /*上一屏按钮样式*/
    #pre{position: absolute;left: 10%; display: block; width: 70px; height: 70px; background: #333;top: 50%;margin-top: -35px; text-align: center; line-height: 70px;color: #FFF;z-index: 9999;}
    /*下一屏按钮样式*/
    #next{position: absolute;right: 10%; display: block; width: 70px; height: 70px; background: #333;top: 50%;margin-top: -35px; text-align: center; line-height: 70px;color: #FFF;z-index: 9999;}
    /*CSS样式可以根据自己需要自行修改,如需修改CSS名称,请注意JQuery里面的全局变量的CSS名称变化*/
    </style>
    <script>
    $(function(){
        // 本版本修改了CSS,JQ代码:
        // 1.用户可自由上传相同尺寸的图片,只需要在CSS中设置需要的幻灯的高度和宽度,即可自动实现幻灯图片的垂直和水平居中,解决了若幻灯为全屏需设置为背景的麻烦。
        // 注:如果图片的长宽不一致,可将
        // $cont_li.children("img").css("marginLeft",-parseInt($cont_li.eq(inde).children("img").width()/2));
        // $cont_li.children("img").css("marginTop",-parseInt($cont_li.eq(inde).children("img").height()/2));
        // 这两句代码放到change_li方法内,即可实现不同尺寸图片垂直和水平居中。
        // 2.优化了代码,使代码更加的灵活,简洁,易读。
        //定义的全局变量
        var $cont_li = $("#content li");//获取轮播图的节点
        var inde = 0;                    //节点的索引
        var interval;                    //定时器
        var caption_li = "";            //焦点列表
        var $pre = $("#pre");            //上一屏按钮ID
        var $next = $("#next");            //下一屏按钮ID
        var act = "active";                //焦点选中状态CSS
        var con_non = "non";            //轮播图的隐藏CSS
        var con_blo = "blo";            //轮播图的显示CSS
        var click_or_mouover = "click"; //焦点触发事件的状态
        var con_mouse = true;            //鼠标移动到轮播图上是否停止
        var time_change = 1000;            //轮播图切换的时间间隔
        //居中显示轮播图片(不用设置为背景)
        $cont_li.eq(0).addClass("blo");
        $cont_li.children("img").css("marginLeft",-parseInt($cont_li.eq(0).children("img").width()/2));
        $cont_li.children("img").css("marginTop",-parseInt($cont_li.eq(0).children("img").height()/2));
        //通过轮播图节点的个数,动态生成焦点列表的个数
        for (var i = 0; i < $cont_li.length; i++) {
            caption_li += "<li>"+(i+1)+"</li>";    //此处为焦点的数字,不要写成"<li></li>"即可
        };
        $("#caption").append(caption_li);        //添加到caption节点中
        var $cap_li = $("#caption li");         //获取焦点图节点
        $cap_li.eq(0).addClass("active");        //设置第一个焦点选中
        //判断焦点总长度,并让其居中显示。
        var $cap_li_width = ($cap_li.width()+parseInt($cap_li.css("margin-right"))+
                            2*parseInt($("#caption li").css("borderTopWidth")))*$cont_li.length;
        $("#caption").css("width",$cap_li_width).css("margin","0 auto");
        run();                            //执行定时器方法
        //定时器方法
        function run(){                    
            interval = setInterval(sets,time_change);
        }
        //执行的方法
        function sets(){
            change_li();
            inde++;
            if (inde>=$cont_li.length) {inde=0};
        }
        //提取出来的方法
        function change_li() {
            $cap_li.eq(inde).addClass(act).siblings().removeClass(act);
            $cont_li.eq(inde).addClass(con_blo).siblings().removeClass(con_blo);
        }
        //焦点单击事件
        $cap_li.on(click_or_mouover,function(){
            $(this).addClass(act).siblings().removeClass(act);
            inde = $(this).index();
            $cont_li.eq(inde).addClass(con_blo).siblings().removeClass(con_blo);
        })
        if (con_mouse) {
            //轮播图鼠标悬停事件
            $cont_li.hover(function(){
                clearInterval(interval);    //清除定时器
            },function(){
                run();                        //重新绑定定时器
            })
        };
        //上一屏幻灯
        $pre.on("click",function(){
            inde = $("."+act).index() - 1;
            if (inde<0) {inde = $cont_li.length-1;}
            change_li();
        })
        //下一屏幻灯
        $next.on("click",function(){
            inde = $("."+act).index() + 1;
            if (inde>$cont_li.length-1) {inde = 0;}
            change_li();
        })
    })
    </script>
</head>
<body>
    <div class="v_show">
        <a href="javascript:void(0);" id="pre">上一页</a>
        <div class="v_content">
            <!-- 内容展示区 -->
            <ul id="content">
                <li><img src="http://www.mamicode.com/1.jpg" /></li>
                <li><img src="http://www.mamicode.com/2.jpg" /></li>
                <li><img src="http://www.mamicode.com/3.jpg" /></li>
                <li><img src="http://www.mamicode.com/4.jpg" /></li>
                <li><img src="http://www.mamicode.com/5.jpg" /></li>
                <li><img src="http://www.mamicode.com/6.jpg" /></li>
                <li><img src="http://www.mamicode.com/7.jpg" /></li>
                <li><img src="http://www.mamicode.com/8.jpg" /></li>
                <li><img src="http://www.mamicode.com/9.jpg" /></li>
                <li><img src="http://www.mamicode.com/10.jpg" /></li>
            </ul>
        </div>
        <div class="v_caption">
            <!-- 焦点按钮 -->
            <ul id="caption"></ul>
        </div>
        <a href="javascript:void(0);"  id="next">下一页</a>
    </div>
</body>
</html>

幻灯-优化