JavaScript_10_练习:轮播图

news2024/11/27 14:51:51

效果图

代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>练习:轮播图</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    li {
      list-style: none;
    }

    .box {
      margin: 50px auto;
      width: 560px;
      height: 400px;
      overflow: hidden;
    }

    .box>ul {
      display: flex;
      margin-left: -560px;
      transition: all .5s;
    }

    .box ul li a {
      display: block;
      width: 560px;
      height: 320px;
      background: url(images/slider01.jpg) no-repeat left top/cover;
    }

    .box ul li:first-child a {
      background-image: url(images/slider08.jpg);
    }

    .box .bottom {
      position: relative;
      width: 560px;
      height: 80px;
      background-color: rgb(100, 67, 68);
    }

    .box .bottom p {
      padding: 15px;
      font-size: 18px;
      color: #fff;
    }

    .box .bottom ul {
      display: flex;
      margin-left: 14px;
    }

    .box .bottom ul li {
      margin: 0 4px;
      width: 8px;
      height: 8px;
      border-radius: 4px;
      background-color: rgba(255, 255, 255, .5);
    }

    .box .bottom ul .active {
      transform: scale(1.5);
      border-radius: 6px;
      background-color: #fff;
    }

    .box .bottom span {
      position: absolute;
      top: 26px;
      width: 28px;
      height: 28px;
      background-color: rgba(255, 255, 255, .1);
      font-size: 18px;
      color: #fff;
      text-align: center;
      cursor: pointer;
    }

    .box .bottom .left {
      right: 55px;
    }

    .box .bottom .right {
      right: 15px;
    }
  </style>
</head>

<body>
  <div class="box">
    <ul>
      <!-- 10个li,实际上只有8张轮播图,第1个和第10个li是为了无缝衔接轮播图
       第1个li显示最后一张轮播图的图片,第10个li显示第一张轮播图的图片
       轮播图是第2个li到第9个li -->
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
      <li><a href="#"></a></li>
    </ul>
    <div class="bottom">
      <p>2022明星陪你过大年!</p>
      <ul>
        <li class="active"></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
      <span class="left">&lt;</span>
      <span class="right">&gt;</span>
    </div>
  </div>
  <script>
    // 数据
    const data = [
      { url: 'images/slider01.jpg', title: '2022明星陪你过大年!', color: 'rgb(100, 67, 68)' },
      { url: 'images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
      { url: 'images/slider03.jpg', title: '八年游戏策划"缝"的游戏是啥样?', color: 'rgb(36, 31, 33)' },
      { url: 'images/slider04.jpg', title: '真正的jo厨出现了!', color: 'rgb(139, 98, 66)' },
      { url: 'images/slider05.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(67, 90, 92)' },
      { url: 'images/slider06.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(166, 131, 143)' },
      { url: 'images/slider07.jpg', title: '哔哩哔哩小年YEAH!', color: 'rgb(53, 29, 25)' },
      { url: 'images/slider08.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(99, 72, 114)' },
    ]

    // 设置轮播图的图片,第一张和最后一张图片在CSS里面设置,这里不设置
    for (let i = 0; i < data.length; i++) {
      const a = document.querySelectorAll(".box ul li a")[i + 1]
      a.style.backgroundImage = `url(${data[i].url})`
    }

    // 定义一个更换图片, 底部颜色, 文字, 小圆点的函数
    const ul = document.querySelector(".box>ul")
    const bottom = document.querySelector(".box .bottom")
    const p = document.querySelector(".box .bottom p")
    const lis = document.querySelectorAll(".box .bottom ul li")
    function change(distance, num) {
      ul.style.marginLeft = `${distance}px` //图片
      bottom.style.backgroundColor = data[num].color //底部颜色
      p.innerText = data[num].title //文字
      document.querySelector(".box .bottom ul .active").classList.remove("active") //移除原来的高亮小圆点
      lis[num].classList.add("active") //添加高亮小圆点
    }

    // 点击左按钮播放上一张
    const left = document.querySelector(".box .bottom .left")
    let num = 0
    let distance = -560
    left.addEventListener("click", () => {
      if (num === 0) {
        num = data.length - 1
      } else {
        num--
      }
      distance += 560
      ul.style.transition = "all .5s"
      change(distance, num)
      // 如果当前图片为第一张图片(最后一张轮播图),则切换成倒数第二张图片(最后一张轮播图)
      if (distance === 0) {
        // 0.5秒后再切换,保证滑动效果
        setTimeout(() => {
          ul.style.transition = "all 0s" //转换前先取消过渡效果
          distance = -(560 * (data.length))
          ul.style.marginLeft = `${distance}px`
        }, 500);
      }
    })

    // 点击右按钮播放下一张
    const right = document.querySelector(".box .bottom .right")
    right.addEventListener("click", () => {
      if (num === data.length - 1) {
        num = 0
      } else {
        num++
      }
      distance -= 560
      ul.style.transition = "all .5s"
      change(distance, num)
      // 如果当前图片为最后一张图片(第一张轮播图),则切换成第二张图片(第一张轮播图)
      if (distance === -(560 * (data.length + 1))) {
        // 0.5秒后再切换,保证滑动效果
        setTimeout(() => {
          ul.style.transition = "all 0s" //转换前先取消过渡效果
          distance = -560
          ul.style.marginLeft = `${distance}px`
        }, 500);
      }
    })

    // 每隔2秒自动播放
    let autoplay = setInterval(() => {
      right.click() //模拟点击右按钮
    }, 2000)

    //鼠标移入暂停播放,鼠标移出继续播放
    const box = document.querySelector(".box")
    box.addEventListener("mouseenter", () => {
      clearInterval(autoplay)
    })
    box.addEventListener("mouseleave", () => {
      autoplay = setInterval(() => {
        right.click() //模拟点击右按钮
      }, 2000)
    })
  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OD C卷 - 查找一个有向网络的头节点和尾节点

查找一个有向网络的头节点和尾节点 &#xff08;200&#xff09; 在一个有向图中&#xff0c;有向边用两个整数表示&#xff0c;第一个整数表示起始节点&#xff0c;第二个整数表示终止节点&#xff1b;图中只有一个头节点&#xff0c;一个或者多个尾节点&#xff1b;图可能存…

Linux系统信息排查

目录 介绍步骤 介绍 1、熟悉查看CPU信息、操作系统信息、用户信息、特殊权限账户、启动项和任务计划的排查命令 2、在进行受害主机排查时&#xff0c;首先要对主机系统进行基本排查&#xff0c;方便对受害主机有一个初步的了解。 3、利用lscpu和uname -a查看系统硬件软件基本…

JavaScript(28)——正则表达式

定义正则表达式语法&#xff1a; const 变量名 /表达式/ 判断是否有符合规则的字符串&#xff1a; test()方法 用来查看正则表达式与指定的字符串是否匹配 语法&#xff1a; regObj.test(被检测的字符串) //返回布尔值 regObj.exec(字符串) //返回的是数组 <script>…

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结 一、环境信息二、安装部署三、向导 介绍如何基于Docker、Docker Compose的方式安装部署Confluence 8.3.4&#xff0c;并且设置数据的持久化存储。 一、环境信息 操作系统&#xff1a;CentOS 7.9 Docker Ver…

C++之多态(下)

目录 多态的实现原理 多态的拓展 单继承中的多态 多继承中的多态 上期&#xff0c;我们学习了多态的基本概念&#xff0c;本期我们来学习多态的实现原理。 多态的实现原理 class Base { public:virtual void func1(){cout << "Base::func1()" <<…

CUTLASS 中的 47_ampere_gemm_universal_streamk 示例

前一篇文章介绍了 Stream-K: Work-centric Parallel Decomposition for Dense Matrix-Matrix Multiplication on the GPU 论文&#xff0c;下面对其代码实现进行分析。 cutlass 的 examples/47_ampere_gemm_universal_streamk 展示了 GEMM Stream-K 算法在 Ampere 架构上的使用…

健身房管理系统--论文pf

TOC springboot542健身房管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持&#xff0c;带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础&#xff0c;打造的全新沉浸文化项目“国宝数字体验展“&#xff0c;借由文物的视角、站在历史的星河中&#xff0c;探寻时间长河中不变的智慧…

设计模式笔记02(java版)

文章目录 创建者模式单例设计模式 ★单例模式的结构单例模式的实现饿汉式-方式1&#xff08;静态变量方式&#xff09;饿汉式-方式2&#xff08;静态代码块方式&#xff09;懒汉式-方式1&#xff08;线程不安全&#xff09;懒汉式-方式2&#xff08;线程安全&#xff09;懒汉式…

Linux环境安装 JDK

目录 JDK准备 1&#xff09;卸载现有JDK&#xff08;3台节点&#xff09; 2&#xff09;用Xftp工具将JDK导入到hadoop12的/opt/software文件夹下面 3&#xff09;在Linux系统下的opt目录中查看软件包是否导入成功 4&#xff09;解压JDK到/opt/module目录下 5&#xff09;配…

数据恢复新宠儿:2024年新兴软件趋势与亮点解析

你的手机、优盘、电脑里是不是都存储这你生活的点点滴滴&#xff1f;不知道你有没有遇到过数据误删或者消失的情况。如果有数据恢复精灵能帮你找回数据是不是为你的数据找回点亮了方向。这次我就介绍几款数据恢复工具带你走出数据丢失的困境。 1.福昕数据恢复 链接直达&#…

告别 Coding 噩梦-掌握这10个习惯,成为大数据开发高手

你是否曾在半夜被一个顽固的bug折磨得睡不着觉?是否因为理解不了复杂算法而感到沮丧?别担心,你并不孤单。作为一名经验丰富的大数据开发者,我深知编程之路上的挫折感。但今天,我要和你分享我是如何在这条充满荆棘的道路上找到突破,最终成长为一名得心应手的编程高手的。 前…

达梦数据库的系统视图v$tablespace

达梦数据库的系统视图v$tablespace 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$TABLESPACE 提供了有关数据库中的表空间&#xff08;Tablespace&#xff09;信息。这些信息对于管理数据库存储和优化性能非常关键。表空间是数据库逻辑存储结构的一个层次…

基于Java的小区物业管理系统设计与实现

TOC springboot596基于Java的小区物业管理系统设计与实现--论文 研究背景 小区物业管理系统主要通过计算机网络&#xff0c;对小区物业管理系统所需的信息进行统一管理&#xff0c;方便用户随时随地进行增添、修改、查询、删除各类信息。本系统极大的促进了系统与数据库管理…

Python编码系列—前端后浪:Python前后端分离开发实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

我“开发“了一款大模型应用,AI门槛这么低了吗?

现在国产大模型多如牛毛。虽然可选的大模型产品很多&#xff0c;但普遍存在同质化、高分低能、实用性差、专业性不足的问题&#xff0c;哪怕是诸如ChatGPT、Gemini这样全球顶尖的大模型也会存在这种情况。 还有一点比较重要的是&#xff0c;由于大模型需要算力、算法、数据的基…

干货:2024年四大翻译工具新体验!

在全球化的今天&#xff0c;语言的障碍似乎越来越小&#xff0c;这得益于各种翻译工具的飞速发展。从简单的在线翻译到复杂的AI翻译技术&#xff0c;我们有了更多的选择来跨越语言的鸿沟。以下是几款备受推崇的翻译工具&#xff0c;推荐给大家 福昕在线翻译 链接&#xff1a;…

onlyoffice连接器(connector)开发使用精讲 二次开发 深入开发【一】

连接器是onlyoffice调用web api的一个基础工具&#xff0c;可以方便开发者或者用户与业务系统结合使用web功能。 关于connector官方说明文档在这里&#xff1a;Automation API - ONLYOFFICE Api Documentation 注意&#xff1a;该功能针对开发者版、企业版&#xff0c;社区版常…

高考杂志社《高考》杂志社高考杂志社编辑部2024年第22期目录

高考论坛 高考内容改革背景下的高中数学教学策略探究 高琳琳; 3-5 新高考背景下高中数学教学中核心素养的培养路径 王芳芳; 6-8 教改研究 任务型教学在高中语文大单元教学中的应用 蔡莎; 9-11 大单元教学在高中思想政治教学中的应用探究 陈玲; 12-14 高中语文班…

局部整体(三)利用python绘制饼图

局部整体&#xff08;三&#xff09;利用python绘制饼图 饼图&#xff08; Pie Plot&#xff09;简介 饼图是一个将整体划分为几个扇形的圆形统计图表&#xff0c;用于描述数量、频率或百分比之间的相对关系。饼形图适合用来快速展示数据比例分布&#xff0c;但不利于展示较多…