zoukankan      html  css  js  c++  java
  • 原生js实现轮播图

    原生js 使用for循环和排他思想实现轮播图 轮播、切换功能。
    这里排他思想指的是排除其他,保留自己,方法就是最开始将所有的项包括选中项都设置为默认样式,再遍历数组给相应的选中项设置自己的样式
    具体代码和注释如下:

    <!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>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            ul,ol{
                list-style: none;
            }
            .box{
                position: relative;
                980px;
                height: 545px;
                border: 1px solid #333;
                margin: 20px auto;
            }
            .box .pics li{
                position: relative;
                left: 0;
                top: 0;
                 980px;
                height: 545px;
                display: none;
            }
            .box .pics .current{
                display: block;
            }
            /* 按钮 */
            .box .btn a{
                position: absolute;
                top: 50%;
                 40px;
                height: 40px;
                margin-top: -20px;
                background-color: rgba(255, 255, 255, 0.192);
                font: 20px/40px "宋体";
                text-align: center;
                color: rgba(255, 255, 255);
                text-decoration: none;
                font-weight: bold;
            }
            
            .box .btn .left-btn{
                left: 10px;
            }
            .box .btn .right-btn{
                right: 10px;
            }
            .box .btn a:hover{
                background-color: rgba(255, 255, 255, 0.5);
            }
            /* 下标 */
            .box .sub{
                position: absolute;
                left: 450px;
                bottom: 30px;
                 300px;
            }
            .box .sub li{
                float: left;
                 10px;
                height: 10px;
                margin-right: 20px;
                background-color: rgb(255, 255, 255,0.3);
                font: 8px/10px "微软雅黑";
                text-align: center;
                color: #666;
                cursor: pointer;
            }
            .box .sub .current{
                background-color: rgba(255, 254, 254, 0.884);
    
            }
        </style>
    </head>
    <body>
        <div class="box" id="box">
            <!-- 图片 -->
            <ul class="pics" id="pics">
                <li class="current"><img src="../../../imgs/1.jpg" alt=""></li>
                <li><img src="../../../imgs/2.jpg" alt=""></li>
                <li><img src="../../../imgs/3.jpg" alt=""></li>
                <li><img src="../../../imgs/4.jpg" alt=""></li>
            </ul>
    
            <!-- 按钮 -->
            <div class="btn" id="btn">
                <a href="javascript:;" class="left-btn" id="left-btn">&lt;</a>
                <a href="javascript:;" class="right-btn" id="right-btn">&gt;</a>
            </div>
            
            <!-- 小圆点 -->
            <ol class="sub" id="sub">
                <li class="current"></li>
                <li></li>
                <li></li>
                <li></li>
            </ol>
            
            
        </div>
    
        <script>
            var box = document.getElementById("box");
            var pics = document.getElementById("pics");
            var sub = document.getElementById("sub");
            var imgs = pics.children;
            var subs = sub.children;
            var btnl = document.getElementById("left-btn");
            var btnr = document.getElementById("right-btn");
            
            // 全局信号量,存储的是要展示的图片所在li的下标
            var n = 0;
            //1 右按钮点击切换
            btnr.onclick =rightRun;
    
            //2 左按钮同理
            btnl.onclick = function(){
                n --; 
                //判断n是否超过最大下标,若是,就要从第一张换到最后一张切
                if(n < 0){
                   // 第一张切换最后一张图片
                   n = imgs.length-1;
                    
                }
                  //调用切换函数
                  change();
                
            }
            
            //3 小圆点点击切换
            for(var i = 0;i < subs.length;i ++){
                // 存储自己的下标
                subs[i].index = i;
                // 添加点击事件
                subs[i].onclick = function(){
                   n = this.index;
                   //调用切换函数
                   change();
    
                };
            };
    
            //4 定时轮播,这里定时器里的方法直接使用已经写好的切换下一张图片的方法
            var timer = setInterval(rightRun,3000);
    
            //5 鼠标移上轮播图 停止轮播
            box.onmouseover = function(){
                clearInterval(timer);
            }
    
            //6 鼠标离开轮播图 重新开启
            box.onmouseout = function(){
                timer = setInterval(rightRun,3000);
            }
            //定义右按钮式事件
            function rightRun(){
                // 下标自加
                n ++; 
                //判断n是否超过最大下标,若是,就要从最后一张切换到第一张
                if(n > imgs.length-1){
                   // 最后一张图片切换第一张
                   n = 0;
                }
                 //调用切换函数
                 change();
            }
    
            //定义切换函数
            function change(){
                
                //排他一下
                for(var i = 0;i < imgs.length;i ++){
                    imgs[i].className = ""; 
                    subs[i].className = "";
                }
                //保留自己
                imgs[n].className = "current";
                subs[n].className = "current";
            }
        </script>
    </body>
    </html>
    

  • 相关阅读:
    最短路径问题
    这是我的第一篇博客
    Time Series Anomaly Detection
    R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN
    database 学习
    AWS Cloud Practioner 官方课程笔记
    Cassandra commands
    go 语言学习
    [Udemy] ES 7 and Elastic Stack
    第9章 内联函数
  • 原文地址:https://www.cnblogs.com/dreamtown/p/14477595.html
Copyright © 2011-2022 走看看