当前位置: 首页 > article >正文

轮播图html

题十二:轮播图

要求:
1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示;
2.图片切换之后,图片中下方的小圆点会同时进行切换,并且点击相应的小圆点可以切换到相应的图片上;
3.点击左右箭头可以进行左右图片的切换;
4.图片上需有介绍的文字,会随图片切换一起进行切换。

原理:

  1. 当鼠标进入时,左走箭头出现,定时器关闭,离开时,箭头消失,定时器开启。
  2. 写DOM对应的小圆点,找让图片文字小圆点的高亮移除,再当索引值到了之后,添加高亮事件.
  3. 当点击左图右图是分别修改其对应的索引号.
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF - 8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义轮播图</title>
    <style>
        #container {
            margin: 0 auto;
            position: relative;
            width: 600px;
            height: 600px;
            overflow: hidden;
        }
        #container img {
            width: 100%;
            height: 100%;
            background-size: cover;
            display: none;
        }
        #container img.active {
            display: block;
        }
        .arrow {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            font-size: 30px;
            color: white;
            background: rgba(0, 0, 0, 0.3);
            padding: 10px 15px;
            cursor: pointer;
            display: none;
        }
        #left {
            left: 10px;
        }
        #right {
            right: 10px;
        }
        #dots {
            position: absolute;
            bottom: 10px;
            left: 50%;
            transform: translateX(-50%);
            display: flex;
        }
        #dots span {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: gray;
            margin: 0 5px;
            cursor: pointer;
        }
        #dots span.active {
            background: white;
        }
        .name {
            position: absolute;
            bottom: 0;
            width: 100%;
            background: rgba(0, 0, 0, 0.5);
            color: white;
            padding: 10px;
            text-align: center;
            font-size: 30px;
        }
    </style>
</head>

<body>
    <div id="container">
        <img src="./任务/交互图片/1.jpg" alt="图片1" class="active">
        <div class="name">fall'in out</div>
        <img src="./任务/交互图片/2.jpg" alt="图片2">
        <div class="name">找自己</div>
        <img src="./任务/交互图片/3.jpg" alt="图片3">
        <div class="name">单车恋人</div>
        <span id="left" class="arrow">&lt;</span>
        <span id="right" class="arrow">&gt;</span>
        <div id="dots"></div>
    </div>

    <script>
        const Container = document.querySelector('#container')
        const images = document.querySelectorAll('#container img')
        const names = document.querySelectorAll('.name')
        const dotsContainer = document.getElementById('dots')
        const Left = document.querySelector('#left')
        const Right = document.querySelector('#right')
        //当前显示图片的索引
        let currentIndex = 0
        //命名自动播放定时器
        let autoplayInterval

         function onMouseEnter() {
            //鼠标一进入就关闭定时器
            clearInterval(autoplayInterval)
            Left.style.display = 'block'
            Right.style.display = 'block'
        }
        function onMouseLeave() {
            //开启
            startAutoplay()
            Left.style.display = 'none'
            Right.style.display = 'none'
        }
        Left.addEventListener('click', () => {
            clearInterval(autoplayInterval)
            //一定要调用
            leftImage()
        });
        Right.addEventListener('click', () => {
            clearInterval(autoplayInterval)
            rightImage()
        })

        Container.addEventListener('mouseenter', function() {
            onMouseEnter()
        })
        Container.addEventListener('mouseleave', function() {
            onMouseLeave()
        })
        
        // 显示指定索引的图片
        function showImage(index) {
            images.forEach((img, i) => {
                //先全部移除高亮
                img.classList.remove('active')
                //文字也先不显示
                names[i].style.display = 'none'
            })
            dotsContainer.querySelectorAll('span').forEach((dot, i) => {
                //小圆点高亮移除
                dot.classList.remove('active')
            })
            //到相应的索引号,高亮和文字显示
            images[index].classList.add('active')
            names[index].style.display = 'block'
            //小圆点高亮添加
            dotsContainer.querySelectorAll('span')[index].classList.add('active')
            //修改索引号
            currentIndex = index
        }

        function createDots() {
            //回调函数,函数对应的DOM元素及索引号
            images.forEach((_, index) => {
                //新建小圆点,有几个DOM建几个
                const dot = document.createElement('span')
                if (index === 0) {
                    //默认高亮类名
                    dot.classList.add('active')
                }
                dot.addEventListener('click', function() {
                    //一旦点击,关闭定时器
                    clearInterval(autoplayInterval)
                    showImage(index)
                })
                //根据DOM数量,添加小圆点
                dotsContainer.appendChild(dot)
            });
        }
        // 右图
        function rightImage() {
            //index+1
            currentIndex = (currentIndex + 1) % images.length
            showImage(currentIndex)
        }

        // 左图
        function leftImage() {
            //同理
            currentIndex = (currentIndex - 1 + images.length) % images.length
            showImage(currentIndex);
        }

        function startAutoplay() {
            autoplayInterval = setInterval(rightImage, 1500)
        }

        // 调用小圆点和自动播放,使页面一开始就有效果
        createDots()
        startAutoplay()
      
    </script>
</body>

</html>

请添加图片描述


http://www.kler.cn/a/550579.html

相关文章:

  • KVM设置端口转发
  • windows 设置poppler
  • 机器学习基本篇
  • DeepSeek教unity------State Machine
  • 解锁大数据治理:开启数据驱动的新时代
  • Go 语言里中的堆与栈
  • VScode运行后出现黑窗口
  • UE5 Niagara 粒子远处闪烁解决
  • FPGA实现SDI视频解码转GTY光口传输,基于GS2971+Aurora 8b/10b编解码架构,提供工程源码和技术支持
  • kubernetes源码分析 kubelet
  • java速通笔记
  • Windows Docker运行Implicit-SVSDF-Planner
  • 【项目实战】日志管理和异步任务处理系统
  • 滴水逆向_新增节
  • sql语言语法的学习
  • 【大模型系列篇】Vanna-ai基于检索增强(RAG)的sql生成框架
  • Vue 基础入门——起步与简单应用
  • Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
  • 08模拟法 + 技巧 + 数学 + 缓存(D4_缓存)
  • 蓝桥杯之最短路径算法