HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放

这篇具有很好参考价值的文章主要介绍了HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求

昨天我们做了轮播图的自动播放,即每隔一秒自动切换一次

今天我们增加两个需求:

1、鼠标点击向右按钮,轮播图往后切换一次;鼠标点击向左按钮,轮播图往前切换一次

2、鼠标悬停在轮播图区域中时,轮播图暂停播放

HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放,html,css,javascript

 

二、代码素材

以下是缺失JS部分的代码,感兴趣的小伙伴可以先自己试着写一写

<!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/slider01.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>
                <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/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
            { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
            { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
            { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
            { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
            { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
            { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
            { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
        ]
    </script>
</body>
 
</html>

三、算法思路

1、将代码素材在浏览器中打开,并按F12进入开发者模式,分析各个HTML标签在轮播图中的位置及作用

2、划分业务模块:

        2.1.  模块一:自动播放模块

        2.2.  模块二:手动播放模块

        2.3.  模块三:鼠标悬停暂停播放模块

3、由于三个模块都与轮播图的播放有关,所以我们可以封装一个函数,实现轮播图的渲染

4、手动播放模块:分别为两个按钮添加鼠标点击事件,计数器 i 配合渲染函数实现手动播放下一张与手动播放上一张

 5、自动播放模块:利用间歇函数实现一秒切换一次的功能,间歇函数中调用手动播放下一张模块中的鼠标点击事件实现轮播图的顺序播放

6、鼠标悬停暂停播放模块:注册光标进入事件,光标进入,终止定时器;注册光标离开事件,光标离开,开启定时器文章来源地址https://www.toymoban.com/news/detail-621732.html

四、完整代码

<!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/slider01.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>
        <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/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
      { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
      { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
      { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
      { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
      { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
      { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
      { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    ]


    const img = document.querySelector('.slider-wrapper img')
    const p = document.querySelector('.slider-footer p')
    const ul = document.querySelector('.slider-footer .slider-indicator')
    const footer = document.querySelector('.slider-footer')

    let i = 0
    function boFang() {
      img.src = `./images/slider0${i + 1}.jpg`
      p.innerHTML = sliderData[i].title
      footer.style.backgroundColor = sliderData[i].color
      //注意classList.remove()括号中的类名不需要加点号!
      document.querySelector('.slider-indicator .active').classList.remove('active')
      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
    }

    //自动播放模块
    let timer = setInterval(() => {
      next.click()//自动调用鼠标点击事件
    }, 1000)

    //手动播放模块
    const prev = document.querySelector('.prev')
    const next = document.querySelector('.next')
    prev.addEventListener('click', () => {
      i = i - 1 === -1 ? 7 : i - 1
      boFang()
    })
    next.addEventListener('click', () => {
      i = (i + 1) % 8
      boFang()
    })

    //鼠标悬停暂停播放模块
    const slider = document.querySelector('.slider')
    slider.addEventListener('mouseenter', () => {
      clearInterval(timer)
    })
    slider.addEventListener('mouseleave', () => {
      //开启定时器
      //注意,再次开启定时器不要写let timer
      timer = setInterval(() => {
        next.click()//自动调用鼠标点击事件
      }, 1000)
    })
</script>
</body>

</html>

到了这里,关于HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网页轮播图制作(html+css+js)

            目的:用于自己做记录,记录制作的过程以及遇到的一些问题。内容参考来自b站的up主:黑马前端 的pink老师JavaScript基础语法课程。 (1)当鼠标经过轮播图,左右两边的按钮出现,离开则隐藏按钮; (2)点击左侧按钮,图片向右播放一张,以此类推,右侧同理;

    2024年02月08日
    浏览(37)
  • JS轮播图,鼠标放上暂停,自动播放

    1、图片能够自动轮播, 2、鼠标移入,轮播停止;移出继续轮播; 知识点:1、定时器:setInterval(); 2、鼠标移入事件:onmouseenter/onmouseover; 鼠标移出事件:onmouseleave/onmouseout; 难点:点击第一张图片,我们想要的效果是鼠标移出后,图片轮播到第二张图片,到事实是轮播到

    2024年02月12日
    浏览(37)
  • 原生JS轮播图+自动播放+按钮切换+鼠标经过暂停+底部圆点切换

    手搓一个原生的JS轮播图,HTML部分就随意写了一点,重点的逻辑还是在JS中,可以实现自动播放banner图片,还有按钮点击切换banner和底部小圆点,点击底部小圆点可以切换banner图等功能,先上个图吧,是不是很丰富`_`  先放 JS部分 的代码吧,主要用到了点击事件、定时器等技

    2024年02月06日
    浏览(40)
  • 前端:纯css实现图片轮播(自动+手动)

    目录 1.图片自动轮播 2.图片手动轮播 3.补充内容 创建2个盒子,一个盒子进行轮播图展示,一个盒子用来承载图片 CSS重置reset.css normalize.css,在写页面时,由于HTML标签自带一些CSS属性,导致在调试样式的时候会出现各种奇怪的问题,为了大概率避免这些问题,在写CSS之前可以

    2024年02月04日
    浏览(42)
  • 微信小程序-轮播图的实现

    实现如图所示轮播图,具体编写步骤及原代码请见下方 编写 index.wxml 编写index.wxss 编写 index.js

    2024年02月07日
    浏览(37)
  • vue中swiper轮播图的使用

    说明:导入相应js引css import \\\"Swiper\\\" from \\\"swiper\\\" import \\\"swiper/css/swiper.css\\\"; import \\\"swiper/js/swiper\\\"; 说明:必要的结构使用;直接封装成一个组件  说明:(页面当中务必要有结构);注释已经写入代码。 第一:可以解决获取数据在Swiper实例之前;第二:可以解决v-for遍历完后在Swiper之

    2024年02月14日
    浏览(33)
  • 使用JS来实现轮播图的效果

    最好今天分享一个使用JS制作的轮播图效果 个人名片:  😊 作者简介:一名大一在校生,web前端开发专业  🤡  个人主页:几何小超  🐼 座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。  🎅**学习目标:  坚持每一次的学习打卡 ,学好前端 首先是HTML部分

    2024年01月20日
    浏览(33)
  • JS实现轮播图的三种简单方法。

    实现思路 这可能是轮播图最简单点的实现之一,通过更改图片的src来实现该效果,首先需要将图片命名格式统一比如pic01.jpg,pic02.jpg…,再通过js使用定时器去改变img标签里面的src图片链接的名字来实现切换效果。代码如下: 实现效果 实现思路 这可能是轮播图最简单点的实现

    2024年02月03日
    浏览(34)
  • 【Android】使用ViewPager2实现轮播图效果,手动/自动轮播图

    这里使用Gilde进行加载图片:Glide 使用Gilde可以加载网络图片还可以提高图片加载性能。 接下来新建一个子布局item_image,加载viewPage2的子布局。 ViewPage2就是使用recyclerView实现的,所以这里使用方法其实类似。 这里直接继承RecyclerView.Adapter即可,代码很简单不必多说。 创建一个

    2024年02月03日
    浏览(37)
  • 前端Vue自定义轮播图视频播放组件 仿京东商品详情轮播图视频Video播放效果 可图片预览

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包