原生JS轮播图

这次就不多说了,直接上代码了,刚才写的时候把注释都写到里边啦!~为了表现写代码思路,我写的过程用到的打印、测试都没有删除痕迹,只是做了注释。嘿嘿
html结构


<div class="img_box">
    <!--轮播图片-->
    <ul class="images" id="imgChange">
        <li><img src="images/图片1.jpg" alt=""/></li>
        <li><img src="images/图片2.jpg" alt=""/></li>
        <li><img src="images/图片3.jpg" alt=""/></li>
    </ul>
    <!-- 左右箭头-->
    <div class="arr">
        <div class="arr_left"></div>
        <div class="arr_right"></div>
    </div>
    <!-- 图片上的小圆点-->
    <ul class="circles" id="circles">
        <li class="active"></li>
        <li></li>
        <li></li>
    </ul>
</div>
**CSS样式设置**


 <style>
        *{
            margin: 0;
            padding: 0;
        }
        ul{
            list-style: none;
        }
        .img_box{
            position: relative;
        }
        .img_box ul.images{
            width: 400px;
            height: 500px;
            margin: 50px auto;
            position: relative;
            /*overflow: hidden;*/
        }
        .img_box ul.images li{
            /*把三张图片脱标,根据js设定的zindex重叠到一起*/
            position: absolute;
            /*css3内容,是图片1s内线性速度变化*/
            transition: 1s linear;
        }
        .img_box ul.images li img{
            /*position: absolute;*/
            /*top: 0;*/
            width: 400px;
            height: 500px;
        }
        .img_box .arr{
            width: 400px;
            height: 40px;
            /*background-color: red;*/
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -20px;
            margin-left: -200px;
            z-index: 100;
        }
        .img_box .arr>div{
            width: 40px;
            height: 60px;
            background-color: rgba(0,0,0,0.7);
            text-align: center;
            line-height: 60px;
            color: white;
            cursor: pointer;
            float: left;
            font-size: 25px;
        }
        .img_box .arr .arr_left{
            float: left;
        }
        .img_box .arr .arr_right{
            float: right;
        }
        .img_box .circles{
            position: absolute;
            left: 50%;
            margin-left: -38px;
            bottom: 50px;
            z-index: 100;
        }
        .img_box .circles>li{
            width: 12px;
            height: 12px;
            background-color: red;
            border-radius: 50%;
            float: left;
            margin-left: 10px;
            cursor: pointer;
        }
        .img_box .circles .active{
            background-color: deepskyblue;
        }
    </style>

JS代码 也是做轮播图的核心,一般轮播图出问题都是定时器setInterval带来的问题.多次用定时器的时候,要记得在下一次用定时器前,先把上一个定时器关掉.

<script type="text/javascript">
 window.onload = function () {
            var liItems = document.getElementById("imgChange").children;
            var circles = document.getElementsByClassName("circles")[0].children;

//            console.log(liItems);
            var count = 0;//计数器
            var timer1 = null,timer2 = null;
//            定义图片切换函数(即改变透明度)
            function showImages(index){
            //要显示第index张图片的函数封装
                for(var i = 0;i < liItems.length;i++ ){
            //把所有的图片设置用index,重叠到一起,用zindex排序,
                    liItems[i].style.opacity = 0;
                    //把所有的图片都设置成透明度为0;都不显示
                    circles[i].className = "";
                    //所有的校园点变成默认的红色
                    //     console.log(liItems[i].style.zIndex);
                    //  console.log(liItems[i].style.opacity)
                }
//                console.log(liItems[index]);
//                liItems[index].style.zIndex = 100;
                liItems[index].style.opacity = 1;
                //谁要显示,就给谁单独把透明度改为1,单独显示出来
                circles[index].className = "active";
            }
            showImages(0);//打开网页要显示的图片

            function autoplay(){
            //用来封装自动播放的函数体,真正的自动播放在定时器调用
                if(count % 3 == 0){//一个循环体来设置,总共有3张,即图片的count对应2就是第3张图,
                    // count为3的时候,已经超出图片显示量,将其初始化为0,变为第一张
                    count = 0;
                }
                showImages(count);//显示第count张图片
                count++;//准备下一张
            }
            timer1 = setInterval(autoplay,2000);

            //箭头动态变化
            document.getElementsByClassName("arr_left")[0].onclick = function () {
                clearInterval(timer1);
                if(count == 0){
                    count = 3;
                }
                count--;
                showImages(count);
                console.log(count);
                timer1 = setInterval(autoplay,2000);
            };
            document.getElementsByClassName("arr_right")[0].onclick = function (){
//                alert("s")
                clearInterval(timer1);
                autoplay();
                timer1 = setInterval(autoplay,2000);
            };
            //点击小圆点事件
            console.log(circles);
//            circles[0].onclick = function () {
//                alert("qwe")
//            }

            for(var i = 0;i < circles.length;i++){
                circles[i].index = i;//中间变量保存下i的值
                circles[i].onclick = function () {
//                    alert(this.index);
                    clearInterval(timer1);
                    showImages(this.index);
                    timer1 = setInterval(autoplay,2000);
                }
            }
        }
</script>

“`

posted @ 2016-10-15 20:20  dreamliu666  阅读(230)  评论(0编辑  收藏  举报