轮播图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>
    图片1
    fall'in out
    图片2
    找自己
    图片3
    单车恋人
    < >
    复制代码
     <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>
相关推荐
hongkid4 分钟前
React Native 如何打包正式apk
javascript·react native·react.js
李少兄6 分钟前
简单讲讲 SVG:前端开发中的矢量图形
前端·svg
前端小万7 分钟前
告别 CJS 库加载兼容坑
前端·前端工程化
恋猫de小郭8 分钟前
Flutter 3.38.1 之后,因为某些框架低级错误导致提交 Store 被拒
android·前端·flutter
JarvanMo11 分钟前
Flutter 需要 Hooks 吗?
前端
光影少年22 分钟前
前端如何虚拟列表优化?
前端·react native·react.js
Moment23 分钟前
一杯茶时间带你基于 Yjs 和 reactflow 构建协同流程图编辑器 😍😍😍
前端·后端·面试
菩提祖师_37 分钟前
量子机器学习在时间序列预测中的应用
开发语言·javascript·爬虫·flutter
invicinble41 分钟前
对于前端数据的生命周期的认识
前端
PieroPc44 分钟前
用FastAPI 后端 和 HTML/CSS/JavaScript 前端写一个博客系统 例
前端·html·fastapi