京东简易幻灯片banner图

实现简易京东banner图,上下页切换,圆点切换制作,圆点缩略图制作,圆点缩略图切换,点击圆点及缩略图时同时切换banner/页码备注文字等。

技术:导航栏及圆点制作,绑定事件,for循环,数组,三目运算符,自定义索引,定时器,绑定事件中this上下文指向。

1.html结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>京东简易幻灯片</title>
    <style>
        body,ul,li,a,div { margin:0; padding:0; }
        ul,li { list-style: none ;}
        a { cursor: pointer; text-decoration: none; }
        img { vertical-align: top; }
        .banner_bg { width:1000px; height:800px; background: url('img/bg.jpg') no-repeat; margin: 0 auto; position: relative;}
        .banner { width: 536px; height: 356px; position: absolute; top: 168px; left: 296px; }
        ul li { display: none; }
        ul .active { display: block; }
        .prev,.next { width:25px; height:46px; display: block; background: url('img/ar.png') no-repeat;}
        .prev { position: absolute; top: 154px; left: 12px; }
        .next { 
            position: absolute; top: 154px; right: 12px;
            transform:rotate(180deg);
            -ms-transform:rotate(180deg); 	/* IE 9 */
            -moz-transform:rotate(180deg); 	/* Firefox */
            -webkit-transform:rotate(180deg); /* Safari 和 Chrome */
            -o-transform:rotate(180deg); 	/* Opera */
        }
        .remark { width: 532px; height: 70px; line-height: 70px; position: absolute; top: 544px; left: 296px; text-align: center; color: #666666; font-size: 20px; }
        /* 通过宽高,margin,border,overflow:hidden隐藏border以外的内容及圆角处理导航栏圆点(和三角形图标一样) */
        nav { position: absolute; left: 0; bottom: 10px; text-align: center; width: 100%; }
        nav a { display: inline-block; width: 10px; height: 10px; margin: 0 3px; background: #fff; border-radius: 50%; position: relative; }
        nav img { position: absolute; top: -36px; left: -18px; margin: 0 3px; width: 40px; display: none;  /*opacity: 0;*/ border: 2px solid #fff; }
        nav .active { background: #ff6600; }
    </style>
</head>
<body>
    <div class="banner_bg">
            <div class="banner">
                    <ul>
                        <li class="active"><img src="img/img1.jpg" alt=""></li>
                        <li><img src="img/img2.jpg" alt=""></li>
                        <li><img src="img/img3.jpg" alt=""></li>
                        <li><img src="img/img4.jpg" alt=""></li>
                        <li><img src="img/img5.jpg" alt=""></li>
                    </ul>
                    <span class="prev"></span>
                    <span class="next"></span>
                    <nav>
                        <a href="#" class="active"><img src="img/img1.jpg" alt=""></a>
                        <a href="#"><img src="img/img2.jpg" alt=""></a>
                        <a href="#"><img src="img/img3.jpg" alt=""></a>
                        <a href="#"><img src="img/img4.jpg" alt=""></a>
                        <a href="#"><img src="img/img5.jpg" alt=""></a>
                    </nav>
            </div>
            <div class="mark">时尚潮流先锋——做最好的自己</div>
    </div>
</body>
</html>

2.通过num++实现上下页切换

<script>
        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var num = 1;
        next.onclick = function(){
            console.info(imgPath);
            num++;
            if(num>5){
                num = 1;
            }
            imgPath.src =  "img/img" + num + ".jpg";
        };
        prev.onclick = function(){
            console.info(imgPath);
            num--;
            if(num<1){
                num = 5;
            }
            imgPath.src =  "img/img" + num + ".jpg";
        };
    </script>

3.通过数组实现banner上下页切换

<script>
        //将banner图放进数组
        var bannersArr = ["img/img4.jpg","img/img3.jpg","img/img1.jpg","img/img5.jpg","img/img2.jpg"];
        //将文字说明放进数组
        var markArr = ["时尚潮流先锋——做最好的自己","未来属于我们——只要有你","JavaScript高级工程师——你值得拥有","生命在于静止","畅想未来——有你有我有大家"];

        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var num = 0 ;
        next.onclick = function(){
            num++;
            // if(num>4){
            //     num = 0;
            // }
            num = num>bannersArr.length-1?0:num;
            imgPath.src = bannersArr[num];
            console.info(imgPath.src);
        };
        prev.onclick = function(){
            num--;
            // if(num<0){
            //     num = bannersArr.length-1;
            // }
            num = num<0?bannersArr.length-1:num;
            imgPath.src = bannersArr[num];
            console.info(imgPath.src);
        };
    </script>

4.修改页码备注

<script>
        //将banner图放进数组
        var bannersArr = ["img/img4.jpg","img/img3.jpg","img/img1.jpg","img/img5.jpg","img/img2.jpg"];
        //将文字说明放进数组
        var markArr = ["时尚潮流先锋——做最好的自己","未来属于我们——只要有你","JavaScript高级工程师——你值得拥有","生命在于静止","畅想未来——有你有我有大家"];

        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var num = 0 ;
        next.onclick = function(){
            num++;
            // if(num>4){
            //     num = 0;
            // }
            num = num>bannersArr.length-1?0:num;
            imgPath.src = bannersArr[num];
            console.info(imgPath.src);
        };
        prev.onclick = function(){
            num--;
            // if(num<0){
            //     num = bannersArr.length-1;
            // }
            num = num<0?bannersArr.length-1:num;
            imgPath.src = bannersArr[num];
            console.info(imgPath.src);
        };
    </script>

5.实现banner上下页切换同时圆点同时变化

<script>
        //将banner图放进数组
        var bannersArr = ["img/img4.jpg","img/img3.jpg","img/img1.jpg","img/img5.jpg","img/img2.jpg"];
        //将文字说明放进数组
        var remarkArr = ["时尚潮流先锋——做最好的自己","未来属于我们——只要有你","JavaScript高级工程师——你值得拥有","生命在于静止","畅想未来——有你有我有大家"];

        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var remark = document.querySelector(".remark");
        //需要获取到全部的a标签
        var navs = document.querySelectorAll("nav a");
        var num = 0 ;
        next.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            // navs[num].className = "";
            num++;
            num = num>bannersArr.length-1?0:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            for (var i = 0; i < navs.length; i++) {
                navs[i].className = "";
            }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
            console.info(navs[num]);

        };
        prev.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            // navs[num].className = "";
            num--;
            num = num<0?bannersArr.length-1:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            for (var i = 0; i < navs.length; i++) {
                navs[i].className = "";
            }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
        };

    </script>

6.鼠标移入圆点时,显示缩略图

<script>
        //将banner图放进数组
        var bannersArr = ["img/img4.jpg","img/img3.jpg","img/img1.jpg","img/img5.jpg","img/img2.jpg"];
        //将文字说明放进数组
        var remarkArr = ["时尚潮流先锋——做最好的自己","未来属于我们——只要有你","JavaScript高级工程师——你值得拥有","生命在于静止","畅想未来——有你有我有大家"];

        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var remark = document.querySelector(".remark");
        //需要获取到全部的a标签
        var navs = document.querySelectorAll("nav a");
        // var navImg = document.querySelectorAll("nav img");
        var num = 0 ;
        next.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            navs[num].className = "";
            num++;
            num = num>bannersArr.length-1?0:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            // for (var i = 0; i < navs.length; i++) {
            //     navs[i].className = "";
            // }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
            console.info(navs[num]);

        };
        prev.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            navs[num].className = "";
            num--;
            num = num<0?bannersArr.length-1:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            // for (var i = 0; i < navs.length; i++) {
            //     navs[i].className = "";
            // }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
        };

        //实现鼠标移入移出显示banner缩略图
        //navs是类数组(querySelectorAll获取到的是一组元素),不能直接操作一组元素,因此使用for循环进行操作
        for(var i=0;i<navs.length;i++){
            navs[i].onmouseover = function(){
                //for循环中的代码是在页面一加载就进行解析的,而onmouseover等事件函数是在有事件行为时才执行,所以不能在for循环的事件函数中获取一组元素的值
                //需要通过this上下文环境(在事件函数中,谁调用就指向触发当前函数的元素),所以通过this就可以在循环里获取每个a标签
                var navImg = this.querySelector("img");
                navImg.style.display = "block";
            };
            navs[i].onmouseout = function(){
                //for循环中的代码是在页面一加载就进行解析的,而onmouseover等事件函数是在有事件行为时才执行,所以不能在for循环的事件函数中获取一组元素的值
                //需要通过this上下文环境(在事件函数中,谁调用就指向触发当前函数的元素),所以通过this就可以在循环里获取每个a标签
                var navImg = this.querySelector("img");
                navImg.style.display = "none";
            };
        }
    </script>

7.可点击圆点且可点击缩略图进行切换banner图,页码,文字备注,圆点active

<script>
        //将banner图放进数组
        var bannersArr = ["img/img4.jpg","img/img3.jpg","img/img1.jpg","img/img5.jpg","img/img2.jpg"];
        //将文字说明放进数组
        var remarkArr = ["时尚潮流先锋——做最好的自己","未来属于我们——只要有你","JavaScript高级工程师——你值得拥有","生命在于静止","畅想未来——有你有我有大家"];

        var prev = document.querySelector(".prev");
        var next = document.querySelector(".next");
        var imgPath = document.querySelector(".active img");
        var remark = document.querySelector(".remark");
        //需要获取到全部的a标签
        var navs = document.querySelectorAll("nav a");
        var navImg = document.querySelectorAll("nav img");

        //页面第一次刷新时banner图片,导航缩略图片和文字为数组第一个内容
        imgPath.src = bannersArr[0];
        navImg.src = bannersArr[0];
        remark.innerHTML = remarkArr[0] + " 第1页" ;
        
        var num = 0 ;
        next.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            navs[num].className = "";
            num++;
            num = num>bannersArr.length-1?0:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            // for (var i = 0; i < navs.length; i++) {
            //     navs[i].className = "";
            // }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
        };
        prev.onclick = function(){
            //在切换到下一张前先清除当前banner的active样式
            navs[num].className = "";
            num--;
            num = num<0?bannersArr.length-1:num;
            imgPath.src = bannersArr[num];
            remark.innerHTML = remarkArr[num] + " 第"+ (num+1) +"页";
            //for循环的方式暴力清除全部banner的active样式
            // for (var i = 0; i < navs.length; i++) {
            //     navs[i].className = "";
            // }
            //nav导航栏圆点切换(将当前的banner圆点样式改为active)
            navs[num].className = "active";
        };

        //实现鼠标移入移出显示banner缩略图
        //navs是类数组(querySelectorAll获取到的是一组元素),不能直接操作一组元素,因此使用for循环进行操作
        for(var i=0;i<navs.length;i++){
            navs[i].index = i; // 为第i个a元素添加一个index属性,赋值为i
            navs[i].onmouseover = function(){
                //for循环中的代码是在页面一加载就进行解析的,而onmouseover等事件函数是在有事件行为时才执行,所以不能在for循环的事件函数中获取一组元素的值
                //需要通过this上下文环境(在事件函数中,谁调用就指向触发当前函数的元素),所以通过this就可以在循环里获取每个a标签
                var navImg = this.querySelector("img");
                navImg.src = bannersArr[this.index];
                navImg.style.display = "block";
                // navImg.style.opacity = "1";
            };
            navs[i].onmouseout = function(){
                //for循环中的代码是在页面一加载就进行解析的,而onmouseover等事件函数是在有事件行为时才执行,所以不能在for循环的事件函数中获取一组元素的值
                //需要通过this上下文环境(在事件函数中,谁调用就指向触发当前函数的元素),所以通过this就可以在循环里获取每个a标签
                var navImg = this.querySelector("img");
                window.setTimeout(function(){
                  navImg.style.display = "none";
                },1000);
                //navImg.style.display = "none";
                // navImg.style.opacity = "0";
            };
            navs[i].onclick = function(){
                //将所有a标签的样式进行暴力清除
                for(var j=0;j<navs.length;j++){
                    navs[j].className = "";
                }
                //将当前的a标签的样式设置为active
                this.className = "active";
                //将文字更改为对应页文字
                console.info(this.index);
                imgPath.src = bannersArr[this.index];
                remark.innerHTML = remarkArr[this.index] + " 第"+ (this.index+1) +"页";
                num = this.index;//必须将此处的index再赋值为num,才能再点击按钮后再次按上下一页时不出错
            };
        }
    </script>

猜你喜欢

转载自blog.csdn.net/qq_34569497/article/details/94720238
今日推荐