轮播图html

题十二:轮播图

要求:

1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示;

2.图片切换之后,图片中下方的小圆点会同时进行切换,并且点击相应的小圆点可以切换到相应的图片上;

3.点击左右箭头可以进行左右图片的切换;

4.图片上需有介绍的文字,会随图片切换一起进行切换。

原理:

  1. 当鼠标进入时,左走箭头出现,定时器关闭,离开时,箭头消失,定时器开启。

  2. 写DOM对应的小圆点,找让图片文字小圆点的高亮移除,再当索引值到了之后,添加高亮事件.

  3. 当点击左图右图是分别修改其对应的索引号.

    自定义轮播图
    图片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>
相关推荐
用户298698530144 小时前
在 React 中使用 JavaScript 将 Markdown 转换为 PDF
javascript·react.js·markdown
Hilaku5 小时前
为什么我在团队里禁止使用 axios?
前端·javascript·程序员
兮动人5 小时前
Chrome 152 升级后本地请求全挂了?是 LNA 策略在搞事
前端·chrome·lna·local network
一只游鱼5 小时前
我用原生 JS 做了一个「会呼吸」的博客:Canvas 水境 + 合成音效 + 会破裂的留言气泡(vibe coding)
javascript·agent·canvas·github pages
JarvanMo5 小时前
让 3D 在 Flutter 中焕发生机:Flutter GPU 与 flutter_scene 实战经验
前端
狂师6 小时前
太强了!GitHub上开源了一款AI自动化测试框架,0代码搞定前后端测试!
前端·后端·测试
只睡四小时6 小时前
Local-First 数据契约:一张表装下 4 类数据
前端·javascript·架构设计·local-first·数据契约
迅猛龙办公室6 小时前
Python函数实现反转一个只有3位数的整数
开发语言·前端·python
我星期八休息6 小时前
Redis 的原理和使用(2)
前端·数据库·redis·python·mysql·缓存·bootstrap
Java后端的Ai之路6 小时前
19-ReactJS最佳实践
前端·react.js·前端框架