JavaScrip轮播图

news/2024/7/3 0:09:43

前言

        在网页设计中,轮播图(Carousel)已经成为一种常见的元素,用于展示一系列的图片或内容卡片。它们不仅能够吸引用户的注意力,还能节省空间,使得用户可以在有限的空间内获得更多的信息。今天,我们将一起学习如何从零开始,用原生JavaScript打造一个简单而美观的轮播图组件。

具体代码实现

        JS轮播图的实现核心是使用JavaScript来控制图片的切换和显示,配合HTML和CSS完成布局和样式设置。通过定时器实现图片的自动切换。

1、HTML部分

它描述了一个包含图片、标题、指示器和切换按钮的轮播图组件。

<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 ></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>
  • 这段HTML代码定义了一个名为"slider"的div容器,其中包含两个子容器:一个名为"slider-wrapper"的div和一个名为"slider-footer"的div。
  • 在"slider-wrapper"中,有一个img标签用于显示轮播图的图片。
  • 在"slider-footer"中,有一个p标签用于显示标题文本“对人类来说会不会太超前了?”。
  • 接下来是一个名为"slider-indicator"的ul列表,其中包含8个li元素,这些元素将用作指示器,以显示当前图片的位置和轮播图中的其他图片。
  • 最后,在"toggle" div中,有两个按钮,一个名为"prev",另一个名为"next",它们将用于切换到前一张或后一张图片。

2、css部分

这段CSS代码定义了轮播图组件的样式。

 <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>
  • 首先,使用通配符选择器 * 将 box-sizing 属性设置为 border-box,以确保元素的宽度和高度包括边框和内边距。
  • 接下来,为"slider"容器设置宽度、高度和溢出隐藏属性,以限制其大小并隐藏超出部分的内容。
  • 然后,为"slider-wrapper"容器设置宽度和高度,并将其子元素 img 的宽度和高度设置为100%,以便图片填充整个容器。
  • 接着,为"slider-footer"容器设置高度、背景颜色、内边距和相对定位属性,以便在底部显示标题文本和切换按钮。
  • 然后,为"toggle"容器设置绝对定位属性,将其放置在"slider-footer"的右上角。
  • 接下来,为"toggle"容器中的按钮设置外观、边框、背景、颜色、圆角、光标等样式,并添加悬停效果。
  • 然后,为"slider-footer"容器中的段落设置颜色、字体大小和下边距等样式。
  • 最后,为"slider-indicator"列表设置列表样式、对齐方式等样式,并为列表项设置宽度、高度、边距、背景颜色、透明度等样式,以及激活状态的样式。

3、js部分 

这段代码是一个简单的轮播图实现,首先定义了一个包含图片、标题和颜色的数组,然后随机选择一个元素作为初始显示内容。接着设置图片、标题和背景颜色。最后通过定时器每隔1秒切换到下一个元素。

// 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 pp =document.querySelector('.slider-footer p')
    const footer =document.querySelector('.slider-footer')
    let i=0
    function func(){
      img.src=sliderData[i].url
      pp.innerHTML=sliderData[i].title
      const li = document.querySelector(`.slider-indicator li:nth-child(${i+1})`)
      li.classList.add('active')
      footer.style.backgroundColor=sliderData[i].color
      if (i==0) {
        const lii = document.querySelector(`.slider-indicator li:nth-child(${sliderData.length})`)
        lii.classList.remove('active')
      }else {
        const liii = document.querySelector(`.slider-indicator li:nth-child(${i})`)
        liii.classList.remove('active')
      };
      i++
      if (i==sliderData.length) {i=0};
      console.log(i)
    }
    let n=setInterval(func, 1000)

4、代码效果

 

 总结

        以上就是使用原生JavaScript实现简单轮播图的方法。虽然现代前端开发中有许多现成的库和框架可以提供更复杂的轮播图组件,但理解其背后的基本原理对于提高编程技能仍然非常重要。希望这篇文章能帮助你掌握如何使用原生JavaScript创建轮播图,从而为你的项目增添更多交互性和视觉吸引力。


http://lihuaxi.xjx100.cn/news/2196557.html

相关文章

【红黑树变色+旋转】

文章目录 一. 红黑树规则二. 情况一叔叔存在且为红情况二.变色旋旋 一. 红黑树规则 对于红黑树&#xff0c;进行变色旋转处理&#xff0c;终究都是为了维持颜色以下几条规则&#xff0c;只有颜色和规则维持住了&#xff0c;红黑树就维持住了最长路径的长度不超过最短路径的两倍…

LitCTF2024部分wp

litctf wp 第一次ak了web和misc&#xff0c;非常激动&#xff0c;感谢lictf给我这个机会 最终成果 全靠队里的密码逆向✌带飞。一个人就砍了近一半的分数 这里是我们队的wp web exx 题目名反过来就是xxe&#xff0c;考察xxe&#xff0c;查看登录的数据包 发现传的就是xml…

springboot配置集成RedisTemplate和Redisson,使用分布式锁案例

文章要点 自定义配置属性类集成配置RedisTemplate集成配置分布式锁Redisson使用分布式锁简单实现超卖方案 1. 项目结构 2. 集成RedisTemplate和Redisson 添加依赖 依赖的版本与继承的spring-boot-starter-parent工程相对应&#xff0c;可写可不写 <!--spring data redis…

48、Flink 的 Data Source API 详解

a&#xff09;概述 本节将描述 FLIP-27 中引入的新 Source API 的主要接口。 b&#xff09;Source Source API 是一个工厂模式的接口&#xff0c;用于创建以下组件。 Split EnumeratorSource ReaderSplit SerializerEnumerator Checkpoint Serializer 此外&#xff0c;Sou…

深度解析:短剧市场的发展趋势

一、 短剧视频的兴起 小程序短剧视频是近年来在社交媒体平台上崭露头角的一种内容形式&#xff0c;其独特的表达方式吸引了大量用户的关注&#xff0c;这种类型的视频通常以小幅度、短时长的剧情为主&#xff0c;具有轻松幽默的风格&#xff0c;适合在碎片化的时间作为娱乐消遣…

数据结构之ArrayList与顺序表(上)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 顺序表的学习&#xff0c;点我 上面这篇博文是关于顺序表的基础知识&#xff0c;以及顺序表的实现。…

国标GB/T 28181详解:国标GBT28181-2022的客户端主动发起历史视音频回放流程

目录 一、定义 二、作用 1、提供有效的数据回顾机制 2、增强监控系统的功能性 3、保障数据传输与存储的可靠性 4、实现精细化的操作与控制 5、促进监控系统的集成与发展 三、历史视音频回放的基本要求 四、命令流程 1、流程图 2、流程描述 五、协议接口 1、会话控…

短视频直播教学课程小程序的作用是什么

只要短视频/直播做的好&#xff0c;营收通常都不在话下&#xff0c;近些年&#xff0c;线上自媒体行业热度非常高&#xff0c;每条细分赛道都有着博主/账号&#xff0c;其各种优势条件下也吸引着其他普通人冲入。 然无论老玩家还是新玩家&#xff0c;面对平台不断变化的规则和…