js原生普通轮播图

362 阅读2分钟

轮播图

功能:

可控制是否自动轮播

  • 左右箭头切换上一张,下一张,节流处理
  • 鼠标放到箭头上,图片停止自动轮播,鼠标移开接着继续播放
  • 点击小微缩图可跳转到对应顺序的图片
  • 文字数字随着图片轮播滚动改变

image.png 普通轮播图演示

思路

  • 手动轮播
    • 单击下方的缩略图
    • 当前被单击的缩略图高亮
    • 文本描述需要动态变化
    • 让大图相应的变化
    • 上一张和下一张

  • 手动轮播
    • 自动轮播的本质是手动轮播,实现方式就是在定时器间隔指定的时间,调用 “下一张” 按钮的单击事件
    • 鼠标进入图片区域,停止轮播
    • 鼠标移出之后,重新开启定时器

源码

  • 手动轮播
window.addEventListener('load', function () {
    // 获取元素
    // - 缩略图--标记,我们要为其添加单击事件   
    let indicators = document.querySelectorAll('.indicator li')
    // 文本描述信息,单击之后
    let desc = document.querySelector('.extra > h3')
    let slides = document.querySelectorAll('.slides li')
    let next = document.querySelector('.extra > .next')
    let prev = document.querySelector('.extra > .prev')
    let main = document.querySelector('.main')
    console.log(indicators, desc, slides);

    let index = 0
    // 伪数组遍历
    indicators.forEach(function (ele, i) {
        // 绑定事件
        ele.addEventListener('click', function () {
            // 1.让当前被单击的缩略图,添加高亮样式--样式类名操作
            // 1.1 找到缩略图中有active样式的元素,将其active样式移除
            document.querySelector('.indicator .active').classList.remove('active')
            // 为当前被单击的缩略图元素添加active样式
            ele.classList.add('active')

            // 2.修改文本描述信息
            desc.innerText = `第${i + 1}张图的描述信息`

            // 3.显示对应的大图
            // 3.1 之前有active样式的大图元素,移除active样式
            document.querySelector('.slides .active').classList.remove('active')
            // 3.2 为对应索引位置的大图添加active样式
            slides[i].classList.add('active')
        })
    })
    // 下一张
    next.addEventListener('click', function () {
        index++
        //
        if (index >= indicators.length) {
            index = 0
        }
        indicators[index].click()
    })
    // 上一张
    prev.addEventListener('click', function () {
        index--
        if (index >= indicators.length - 1) {
            index = 0
        }
        indicators[index].click()
    })
  • 自动轮播 清除和开启定时器
// 自动轮播
    let timeId = srtInterval(function () {
        next.click()
    }, 1000)
    // 鼠标进入图片区域,停止轮播
    main.addEventListener('mouseentermo', function () {
        clearInterval(timeId)
    })
    // 鼠标移出之后,重新开启定时器
    main.addEventListener('mouseleave', function () {
        timeId = setInterval(function () {
            next.click()
        }, 1000)

    })

})