轮播图自动播放—定时器版本

 

文章目录

    • 定时器介绍
    1. 开启定时器函数
    2. 关闭定时器函数
    • 轮播图自动播放
    1. html部分
    2. css修饰部分
    3. Js装饰部分
    • 完整代码展示
    • 小结

 

定时器介绍

在Javascript中定时器是利用间歇函数实现重复执行代码。定时器函数主要通过开启定时器函数和关闭定时器函数。

  1. 开启定时器函数:setInterval(函数,间隔时间),其中的间隔时间为毫秒,1秒=1000毫秒。作用:每一一段时间调用该函数。其中定时器返回的是一个id数字(主要用于关闭定时器)。
    setInterval(function(){console.log('一秒执行一次')}, 1000)

     

  2. 关闭定时函数:clearInterval(变量名)。语法:let 变量名 = setInterval(函数,间隔时间) clearInterval(变量名)
    let n = setInterval(function () {console.log('一秒执行一次')}, 1000)
    clearInterval(n)

     

轮播图自动播放

  1. html部分
    <div class="slider">
            <div class="slider-wrapper">
                <img src="../images/2.jpg" alt="" />
            </div>
            <div class="slider-footer">
                <p>一点一滴每一天珍惜</p>
                <ul class="slider-indicator">
                    <li class="active"></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                </ul>
                <div class="toggle">
                    <button class="prev">&lt;</button>
                    <button class="next">&gt;</button>
                </div>
            </div>
        </div>

     

  2. css部分
            * {
                box-sizing: border-box;
            }
            
            .slider {
                width: 560px;
                height: 400px;
                overflow: hidden;
            }
            
            .slider-wrapper {
                width: 100%;
                height: 320px;
            }
            
            .slider-wrapper img {
                width: 100%;
                height: 100%;
                display: block;
            }
            
            .slider-footer {
                height: 80px;
                background-color: rgb(100, 67, 68);
                padding: 12px 12px 0 12px;
                position: relative;
            }
            
            .slider-footer .toggle {
                position: absolute;
                right: 0;
                top: 12px;
                display: flex;
            }
            
            .slider-footer .toggle button {
                margin-right: 12px;
                width: 28px;
                height: 28px;
                appearance: none;
                border: none;
                background: rgba(255, 255, 255, 0.1);
                color: #fff;
                border-radius: 4px;
                cursor: pointer;
            }
            
            .slider-footer .toggle button:hover {
                background: rgba(255, 255, 255, 0.2);
            }
            
            .slider-footer p {
                margin: 0;
                color: #fff;
                font-size: 18px;
                margin-bottom: 10px;
            }
            
            .slider-indicator {
                margin: 0;
                padding: 0;
                list-style: none;
                display: flex;
                align-items: center;
            }
            
            .slider-indicator li {
                width: 8px;
                height: 8px;
                margin: 4px;
                border-radius: 50%;
                background: #fff;
                opacity: 0.4;
                cursor: pointer;
            }
            
            .slider-indicator li.active {
                width: 12px;
                height: 12px;
                opacity: 1;
            }

     

  3. Js部分  分析:1.准备一个数组对象,里面放置需要进行更换的详细信息;2.通过JS中的document.querySelector进行获取元素;3.设置定时器函数,定义一个为0的变量,再将其变量放进函数进行自加操作,然后找到变量对应的对象,进行更换信息,最后激活小圆点,一处上一个高亮的类名,当前变量添加对应的小圆点添加类(数组是从0开始计算,变量也是从0开始的,但是小圆点是从1开始计算的因此需要变量值加1);4.处理图片自动复原从头播放(放到变量自加后面),如果变量大于数组长度则表示图片播放到最后一张了,再将变量重置为0.
            // 1. 初始数据
            const sliderData = [{
                url: '../images/2.jpg',
                title: '一点一滴每一天珍惜',
                color: 'rgb(100, 67, 68)'
            }, {
                url: '../images/3.jpg',
                title: '怕突然来不及好好的爱你',
                color: 'rgb(43, 35, 26)'
            }, {
                url: '../images/4.jpg',
                title: '时针一直倒数着',
                color: 'rgb(36, 31, 33)'
            }, {
                url: '../images/5.jpg',
                title: '我们剩下的快乐',
                color: 'rgb(139, 98, 66)'
            }, {
                url: '../images/6.jpg',
                title: '此刻相拥的狂热',
                color: 'rgb(67, 90, 92)'
            }, {
                url: '../images/1.jpg',
                title: '却永远都深刻',
                color: 'rgb(166, 131, 143)'
            }, {
                url: '../images/7.jpg',
                title: '——邓紫棋《倒数》',
                color: 'rgb(53, 29, 25)'
            }, ]
            const img = document.querySelector('.slider-wrapper img')
            const p = document.querySelector('.slider-footer p')
            const bgc = document.querySelector('.slider-footer')
            let i = 0
    
            function fn() {
                i++
                // 无缝滚动位置
                if (i >= sliderData.length) {
                    i = 0
                }
                img.src = sliderData[i].url
                p.innerHTML = sliderData[i].title
                bgc.style.backgroundColor = sliderData[i].color
                    // 先删除原有的active
                document.querySelector('.slider-indicator .active').classList.remove('active')
                    // 只让当前的li添加active
                document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
            }
            setInterval(fn, 1000)

     

完整代码展示

`
<!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>轮播图点击切换</title>
    <style>
        * {
            box-sizing: border-box;
        }
        
        .slider {
            width: 560px;
            height: 400px;
            overflow: hidden;
        }
        
        .slider-wrapper {
            width: 100%;
            height: 320px;
        }
        
        .slider-wrapper img {
            width: 100%;
            height: 100%;
            display: block;
        }
        
        .slider-footer {
            height: 80px;
            background-color: rgb(100, 67, 68);
            padding: 12px 12px 0 12px;
            position: relative;
        }
        
        .slider-footer .toggle {
            position: absolute;
            right: 0;
            top: 12px;
            display: flex;
        }
        
        .slider-footer .toggle button {
            margin-right: 12px;
            width: 28px;
            height: 28px;
            appearance: none;
            border: none;
            background: rgba(255, 255, 255, 0.1);
            color: #fff;
            border-radius: 4px;
            cursor: pointer;
        }
        
        .slider-footer .toggle button:hover {
            background: rgba(255, 255, 255, 0.2);
        }
        
        .slider-footer p {
            margin: 0;
            color: #fff;
            font-size: 18px;
            margin-bottom: 10px;
        }
        
        .slider-indicator {
            margin: 0;
            padding: 0;
            list-style: none;
            display: flex;
            align-items: center;
        }
        
        .slider-indicator li {
            width: 8px;
            height: 8px;
            margin: 4px;
            border-radius: 50%;
            background: #fff;
            opacity: 0.4;
            cursor: pointer;
        }
        
        .slider-indicator li.active {
            width: 12px;
            height: 12px;
            opacity: 1;
        }
    </style>
</head>

<body>
    <div class="slider">
        <div class="slider-wrapper">
            <img src="../images/2.jpg" alt="" />
        </div>
        <div class="slider-footer">
            <p>对人类来说会不会太超前了?</p>
            <ul class="slider-indicator">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
            <div class="toggle">
                <button class="prev">&lt;</button>
                <button class="next">&gt;</button>
            </div>
        </div>
    </div>
    <script>
        // 1. 初始数据
        const sliderData = [{
            url: '../images/2.jpg',
            title: '一点一滴每一天珍惜',
            color: 'rgb(100, 67, 68)'
        }, {
            url: '../images/3.jpg',
            title: '怕突然来不及好好的爱你',
            color: 'rgb(43, 35, 26)'
        }, {
            url: '../images/4.jpg',
            title: '时针一直倒数着',
            color: 'rgb(36, 31, 33)'
        }, {
            url: '../images/5.jpg',
            title: '我们剩下的快乐',
            color: 'rgb(139, 98, 66)'
        }, {
            url: '../images/6.jpg',
            title: '此刻相拥的狂热',
            color: 'rgb(67, 90, 92)'
        }, {
            url: '../images/1.jpg',
            title: '却永远都深刻',
            color: 'rgb(166, 131, 143)'
        }, {
            url: '../images/7.jpg',
            title: '——邓紫棋《倒数》',
            color: 'rgb(53, 29, 25)'
        }, ]
        const img = document.querySelector('.slider-wrapper img')
        const p = document.querySelector('.slider-footer p')
        const bgc = document.querySelector('.slider-footer')
        let i = 0

        function fn() {
            i++
            // 无缝滚动位置
            if (i >= sliderData.length) {
                i = 0
            }
            img.src = sliderData[i].url
            p.innerHTML = sliderData[i].title
            bgc.style.backgroundColor = sliderData[i].color
                // 先删除原有的active
            document.querySelector('.slider-indicator .active').classList.remove('active')
                // 只让当前的li添加active
            document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
        }
        setInterval(fn, 1000)
    </script>
</body>

</html>

小结

在使用开启定时器函数时应注意:函数名不需要加括号(下面代码为特殊情况,不提倡使用

function fn() {
    console.log('一秒执行一次')
}
setInterval('fn()' , 1000)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简易JS轮自动播放可以通过设置一个定时器来实现。定时器的周期就是轮播放间隔时间。具体的实现步骤如下: 1. 首先,需要定义一个变量来存储定时器的引用,比如`timer`。 2. 创建一个函数,命名为`startTimer()`,在这个函数中设置定时器定时器的回调函数用来执行轮的切换操作。 3. 在定时器的回调函数中,通过计算得到下一张片的目标位置。可以通过获取当前片的位置,并减去每次切换的距离来得到目标位置。 4. 判断目标位置是否是最后一张片,如果是,则需要将容器的位置重置为第一张片的位置,然后再执行切换操作。这样可以实现循环播放。 5. 在执行切换操作之前,需要解绑轮的前一张和后一张的点击事件,以防止快速切换导致混乱。 6. 调用动画函数来实现平滑的切换效果。在动画结束后,重新绑定轮的前一张和后一张的点击事件。 7. 最后,根据所需的播放间隔时间,设置定时器的周期,将轮自动播放的函数`startTimer()`放入定时器中。 下面是一个示例代码,用来实现简易JS轮自动播放: ```javascript var timer = null; // 定时器引用 function startTimer() { timer = setInterval(function() { var target = parseInt(container.css("left")) - 311; if (target != -2799) { btn_pre.unbind("click", display_pre); btn_next.unbind("click", display_next); animate(container, target, function() { btn_pre.bind("click", display_pre); btn_next.bind("click", display_next); }); } else { btn_pre.unbind("click", display_pre); btn_next.unbind("click", display_next); animate(container, target, function() { container.css("left", "-933px"); btn_pre.bind("click", display_pre); btn_next.bind("click", display_next); }); } }, 1800); } ``` 你可以根据具体的轮实现,将上述代码中的变量和函数名替换为你自己的代码中相应的变量和函数名。这样就可以实现简易JS轮自动播放了。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值