学习笔记 - 轮播图案例 (JS - BOM)

html  + css + js 都写在一起。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/animate.js"></script>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    li {
        list-style-type: none;
    }

    a {
        text-decoration: none;
    }

    .header_nav {
        position: relative;
        width: 1200px;
        margin: 50px auto;
    }

    .swiper {
        position: relative;
        height: 460px;
        overflow: hidden;
    }

    .swiper_button_last {
        position: absolute;
        top: 210px;
        left: 0;
        width: 41px;
        height: 69px;
        background: url('img/button.png') no-repeat -84px 50%;
        z-index: 9999;
    }

    .swiper_button_last:hover {
        background: url('img/button.png') no-repeat 0px 50%;
    }

    .swiper_button_next {
        position: absolute;
        top: 210px;
        right: 0;
        width: 41px;
        height: 69px;
        background: url('img/button.png') no-repeat -125px 50%;
        z-index: 9999;
    }

    .swiper_button_next:hover {
        background: url('img/button.png') no-repeat -42px 50%;
    }

    .swiper_slide {
        position: absolute;
        top: 0;
        left: 0;
        width: 500%;
        height: 460px;
    }

    .swiper_slide li {
        float: left;
    }

    .swiper_slide li a img {
        width: 1200px;
        height: 460px;
    }

    .swiper_circle {
        position: absolute;
        bottom: 50px;
        right: 25px;
    }

    .swiper_circle li {
        float: left;
        width: 10px;
        height: 10px;
        border-radius: 10px;
        border: 1px solid #ccc;
        margin-left: 10px;
    }

    .add_bg {
        background-color: white;
    }

</style>
<script>
    window.addEventListener('load', function() {
        // 1.获取元素
        var swiper = document.querySelector('.swiper')
        var swiper_button_next = document.querySelector('.swiper_button_next');
        var swiper_button_last = document.querySelector('.swiper_button_last');
        var swiper_slide = document.querySelector('.swiper_slide');
        var swiper_circle = document.querySelector('.swiper_circle');
        // 1.1元素的其他属性
        var swiperWidth= swiper.offsetWidth; // 获取 swiper 盒子宽度
        
        // 2.事件
        // 当鼠标进入
        swiper_slide.addEventListener('mouseenter', function() {
            clearInterval(timer);
            timer = null; // 清除定时器变量
        })
        // 当鼠标离开
        swiper_slide.addEventListener('mouseleave', function() {
            timer = setInterval(function() {
                swiper_button_next.click(); // 手动调用点击事件
            }, 3000)
        })

        // 自动生成小圆圈
        for(var i = 0; i < swiper_slide.children.length; i++) {
            var li = document.createElement('li');
            li.setAttribute('index', i) // 给li 添加属性 索引号
            swiper_circle.appendChild(li);
            li.addEventListener('click', function() {
                for(var i = 0; i < swiper_circle.children.length; i++) {
                    swiper_circle.children[i].className = ''; // 清空所有 li 的 类名
                }
                this.className = 'add_bg'; // 给点击的 li 添加类名
                var index = this.getAttribute('index'); // 获取 li index属性 这里必须用 this
                num = index; // 为了跟 小圆圈 同步
                circle = index; // 为了跟 小圆圈 同步
                animate(swiper_slide, -index * swiperWidth); // 调用动画函数
            })
        }
        swiper_circle.children[0].className = 'add_bg'; // 一打开页面 第一个 小圆圈加背景

        // 轮播图克隆第一张图片
        var kelong = swiper_slide.children[0].cloneNode(true); // 加 true 深度克隆第一张图片
        swiper_slide.appendChild(kelong); // 把克隆的图片放在 swiper_slide 盒子里

        var num = 0; // 记录第几个
        var circle = 0; // 记录小圆圈第几个
        var flag = true; // 节流阀:防止点击过快 (展示完一张图再进行下一次点击事件
        // 下一张 点击事件
        swiper_button_next.addEventListener('click', function() {
            if(flag) {
                flag = false; // 关闭节流阀  关闭点击事件
                if(num == swiper_slide.children.length - 1) {
                    swiper_slide.style.left = 0;
                    num = 0;
                }
                num ++; // 点击一次+1
                animate(swiper_slide, -num * swiperWidth, function() {
                    flag = true; // 打开节流阀 开启点击事件 (在动画结束后开启
                });
                circle ++;
                if(circle == swiper_circle.children.length){
                    circle = 0;
                }
                circleChange();
            }            
        })

        // 上一张 点击事件
        swiper_button_last.addEventListener('click', function() {
            if(flag) {
                flag = false; // 关闭节流阀  关闭点击事件
                if(num == 0){
                    num = swiper_slide.children.length - 1;
                    swiper_slide.style.left = -num * swiperWidth + 'px';
                }
                num --;
                animate(swiper_slide, -num * swiperWidth, function() {
                    flag = true; // 打开节流阀 开启点击事件 (在动画结束后开启
                });
                circle --;
                if(circle < 0) {
                    circle = swiper_circle.children.length - 1;
                }
                circleChange();
            }
        })

        // 小圆圈排他思想函数
        function circleChange() {
            for(var i = 0; i < swiper_circle.children.length; i++) {
                swiper_circle.children[i].className = '';
            }
            swiper_circle.children[circle].className = 'add_bg';
        }

        // 轮播图自动播放
        var timer = setInterval(function() {
            swiper_button_next.click();
        }, 3000)
    })
</script>
<body>
    <div class="header_nav">
        <!-- 轮播图 -->
        <div class="swiper">
            <!-- 下一张图 -->
            <div class="swiper_button_next"></div>
            <!-- 上一张图 -->
            <div class="swiper_button_last"></div>
            <!-- 图片 -->
            <ul class="swiper_slide">
                <li><a href="javascript:;" class=""><img src="img/lunbo1.jpg" alt=""></a></li>
                <li><a href="javascript:;" class=""><img src="img/lunbo2.jpg" alt=""></a></li>
                <li><a href="javascript:;" class=""><img src="img/lunbo3.jpg" alt=""></a></li>
            </ul>
            <!-- 小圆圈 -->
            <ol class="swiper_circle"></ol>
        </div>
    </div>
</body>
</html>

效果如下:

 

非常欢迎技术交流~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值