原生轮播图(下一页切换,附带指示器)

news2025/1/23 7:13:49

下面是目录结构:

index.html

<!DOCTYPE html>
<html lang="zh">
  <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>
    <link rel="stylesheet" href="./css/index.css" />
    <link rel="stylesheet" href="./css/iconfont.css"/>
  </head>
  <body>
    <div class="carousel-container">
      <div class="carousel-list">
        <div class="carousel-item item-1">1</div>
        <div class="carousel-item item-2">2</div>
        <div class="carousel-item item-3">3</div>
      </div>
      <div class="carousel-arrow carousel-arrow-left">
        <i class="iconfont icon-left"></i>
      </div>
      <div class="carousel-arrow carousel-arrow-right">
        <i class="iconfont icon-right"></i>
      </div>
      <div class="indicator">
        <span class="active"></span>
        <span></span>
        <span></span>
      </div>
    </div>
    <script src="./js/index.js"></script>
  </body>
</html>

 index.js

const doms = {
  carouselList: document.querySelector('.carousel-list'),
  arrowLeft: document.querySelector('.carousel-arrow-left'),
  arrowRight: document.querySelector('.carousel-arrow-right'),
  indicators: document.querySelectorAll('.indicator span'),
};
const count = doms.indicators.length; // 轮播图的数量
let curIndex = 0; // 当前轮播图的索引
function moveTo(index) {
  doms.carouselList.style.transform = `translateX(-${index}00%)`;
  doms.carouselList.style.transition = '.5s';
  // 去掉指示器的选中效果
  var active = document.querySelector('.indicator span.active');
  active.classList.remove('active');
  // 添加选中的指示器
  doms.indicators[index].classList.add('active');
  curIndex = index;
}

doms.indicators.forEach((item, i) => {
  item.onclick = function () {
    moveTo(i);
  };
});

function init() {
  const firstCloned = doms.carouselList.firstElementChild.cloneNode(true);
  const lastCloned = doms.carouselList.lastElementChild.cloneNode(true);
  lastCloned.style.marginLeft = '-100%';
  doms.carouselList.appendChild(firstCloned);
  doms.carouselList.insertBefore(
    lastCloned,
    doms.carouselList.firstElementChild
  );
}

init();

function moveLeft() {
  if (curIndex === 0) {
    doms.carouselList.style.transform = `translateX(-${count}00%)`;
    doms.carouselList.style.transition = 'none';//去掉过渡
    // 强制渲染 / 等待浏览器渲染后再执行,当读取浏览器dom的几何信息会强制回流
    doms.carouselList.clientHeight;
    moveTo(count - 1);
  } else {
    moveTo(curIndex - 1);
  }
}

function moveRight() {
  if (curIndex === count - 1) {
    doms.carouselList.style.transform = `translateX(100%)`;
    doms.carouselList.style.transition = 'none';
    // 强制渲染 / 等待浏览器渲染后再执行
    doms.carouselList.clientHeight;
    moveTo(0);
  } else {
    moveTo(curIndex + 1);
  }
}

doms.arrowLeft.onclick = moveLeft;
doms.arrowRight.onclick = moveRight;

iconfont.css

@font-face {
  font-family: "iconfont"; /* Project id  */
  src: url('iconfont.ttf?t=1714962297970') format('truetype');
}

.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.icon-right:before {
  content: "\e662";
}

.icon-left:before {
  content: "\e663";
}

index.css

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.carousel-container {
  width: 500px;
  height: 300px;
  margin: 20px auto;
  position: relative;
  /* overflow: hidden; */
  outline: 10px solid #000;
}
.carousel-list {
  width: 100%;
  height: 100%;
  display: flex;
  position: relative;
  z-index: -1;
}
.carousel-item {
  height: 100%;
  flex: 0 0 100%;
  width: 100%;
  z-index: -1;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 5em;
}
.carousel-item.item-1 {
  background: #fb5e56;
}
.carousel-item.item-2 {
  background: #febc2e;
}
.carousel-item.item-3 {
  background: #28c840;
}
.carousel-item img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.carousel-arrow {
  position: absolute;
  width: 50px;
  height: 50px;
  background: #000;
  border-radius: 50%;
  color: #fff;
  text-align: center;
  line-height: 50px;
  top: 50%;
  transform: translateY(-50%);
  opacity: 0.1;
  user-select: none;
  cursor: pointer;
  transition: 0.5s;
}
.carousel-arrow:hover {
  opacity: 0.7;
}
.carousel-arrow .iconfont {
  font-size: 1.5em;
}
.carousel-arrow-right {
  right: 10px;
}
.carousel-arrow-left {
  left: 10px;
}

.indicator {
  position: absolute;
  display: flex;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
}

.indicator span {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid #ccc;
  margin: 0 3px;
  cursor: pointer;
}
.indicator span.active {
  border-color: #fff;
  background: #fff;
}

iconfont.ttf 其实就是iconfont的字体文件,里面就是轮播图上一张和下一张的按钮,这边自行设置,文件就不放这里了

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

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

相关文章

迅雷永久破解

链接&#xff1a;https://pan.baidu.com/s/1ZGb1ljTPPG3NFsI8ghhWbA?pwdok7s 下载后解压 以管理员身份运行绿化.bat&#xff0c;会自动生成快捷方式&#xff0c;如果没有可以在program中运行Thunder.exe

车牌检测识别功能实现(pyqt)

在本专题前面相关博客中已经讲述了 pyqt + yolo + lprnet 实现的车牌检测识别功能。带qt界面的。 本博文将结合前面训练好的模型来实现车牌的检测与识别。并用pyqt实现界面。最终通过检测车牌检测识别功能。 1)、通过pyqt5设计界面 ui文件如下: <?xml version="1…

基于树的时间序列预测(LGBM)

在大多数时间序列预测中&#xff0c;尽管有Prophet和NeuralProphet等方便的工具&#xff0c;但是了解基于树的模型仍然具有很高的价值。尤其是在监督学习模型中&#xff0c;仅仅使用单变量时间序列似乎信息有限&#xff0c;预测也比较困难。因此&#xff0c;为了生成足够的特征…

Docker容器:Docker-Consul 的容器服务更新与发现

目录 前言 一、什么是服务注册与发现 二、 Docker-Consul 概述 1、Consul 概念 2、Consul 提供的一些关键特性 3、Consul 的优缺点 4、传统模式与自动发现注册模式的区别 4.1 传统模式 4.2 自动发现注册模式 5、Consul 核心组件 5.1 Consul-Template组件 5.2 Consu…

ICML 2024有何亮点?9473篇论文投稿,突破历史记录

会议之眼 快讯 2024年5月1日&#xff0c;第42届国际机器学习大会ICML 2024放榜啦&#xff01;录用率27.5%&#xff01;ICML 2024的录用结果受到了广泛的关注&#xff0c;本届会议的投稿量达到了9473篇&#xff0c;创下了历史新高&#xff0c;比去年的6538篇增加了近3000篇&…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下&#xff08;我是将其放在了D盘的一个software的文件中管理&#xff09; 2.…

Nest 快速上手 —— (三)中间件 / 异常过滤器

一、 中间件&#xff08;Middleware&#xff09; 1.特点 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象&#xff0c;以及应用程序请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量表示。 中间件函数可以执行以…

自动驾驶融合定位系列教程四:惯性导航解算

自动驾驶融合定位系列教程四&#xff1a;惯性导航解算 一、概述 惯性导航的解算是一个实现起来非常简单&#xff0c;但是理解起来要费一番功夫的东西&#xff0c;所谓“实现”就是把公式变成代码&#xff0c;所谓“理解”&#xff0c;就是要弄明白几个公式是怎么推导出来的。…

硬盘遭遇误删分区?这些恢复技巧你必须掌握!

在日常使用电脑的过程中&#xff0c;我们有时会遇到一些棘手的问题&#xff0c;其中误删分区无疑是一个令人头疼的难题。误删分区意味着我们不小心删除了硬盘上的某个分区&#xff0c;导致该分区内的所有数据瞬间消失。对于许多用户来说&#xff0c;这可能会引发极大的恐慌和焦…

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.1

参考网址&#xff1a;【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中&#xff0c;实现类似《原神》的第三人称跟随相机并非易事&#xff0c;但幸运的是&#xff0c;Unity为我们提供了强大的工具集&#xff0c;其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

软件测试面试问题汇总

一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在平时的学习、工作中一定要善于…

【Ping】Windows 网络延迟测试 ping 、telnet、tcping 工具

ping 命令 属于网络层的ICMP协议&#xff0c;只能检查 IP 的连通性或网络连接速度&#xff0c; 无法检测IP的端口状态。 telnet telnet命令&#xff0c;属于应用层的协议&#xff0c;用于远程登录&#xff0c;也可用于检测IP的端口状态。但是功能有限&#xff0c;只能检测一时…

【WP】第一届 “帕鲁杯“ - CTF挑战赛 Web 全解

Web Web-签到 考点&#xff1a;审计py代码 from flask import Flask, request, jsonify import requests from flag import flag # 假设从 flag.py 文件中导入了 flag 函数 app Flask(__name__)app.route(/, methods[GET, POST]) def getinfo():url request.args.get(url)i…

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析&#xff1a; 游戏中角色不会只有一种武器&#xff0c;不同武器需要不同模型&#xff0c;甚至可能需要角色持握武器的不同位置&#xff0c;因此需要添加专门的武器类&#xff0c;方便武器后续更新&#xff0c;建立一个武器类。 2.操作实现&#xff1a; 1.在ue5中新建…

炼钢厂新篇章:可视化技术引领工业智能化变革

一、什么是炼钢厂可视化&#xff1f; 炼钢厂可视化&#xff0c;简而言之&#xff0c;就是将炼钢生产过程中的各项数据、流程通过图形化、图像化的方式直观展示出来。这不仅能让工作人员更加清晰地了解生产状态&#xff0c;还能大大提高生产效率和安全性。 山海鲸可视化搭建的炼…

C语言知识点补充——ASCLL码表

1、ASCLL码表 ASCII码表&#xff08;American Standard Code for Information Interchange&#xff09;是一种用于将字符编码为数字的标准。它定义了128个字符的编码方式&#xff0c;包括数字、字母、标点符号和控制字符等。每个字符都对应一个唯一的7位或8位二进制数 2、Ascl…

【6D位姿估计】数据集汇总 BOP

前言 BOP是6D位姿估计基准&#xff0c;汇总整理了多个数据集&#xff0c;还举行挑战赛&#xff0c;相关报告被CVPR2024接受和认可。 它提供3D物体模型和RGB-D图像&#xff0c;其中标注信息包括6D位姿、2D边界框和2D蒙版等。 包含数据集&#xff1a;LM 、LM-O 、T-LESS 、IT…

某站戴师兄——Excel实战

1、设置下拉选项&#xff1a;数据——数据验证——设置 如下设置&#xff1a; 2、If、sumif、index、match综合应用&#xff1a; sumif(条件区域&#xff0c;条件&#xff0c;目标区域&#xff09; sumifs(目标区域,条件区域1&#xff0c;条件1,条件区域2&#xff0c;条件2) …

Python深度学习基于Tensorflow(3)Tensorflow 构建模型

文章目录 数据导入和数据可视化数据集制作以及预处理模型结构低阶 API 构建模型中阶 API 构建模型高阶 API 构建模型保存和导入模型 这里以实际项目CIFAR-10为例&#xff0c;分别使用低阶&#xff0c;中阶&#xff0c;高阶 API 搭建模型。 这里以CIFAR-10为数据集&#xff0c;C…

04 深入浅出JVM

本课时的主题是 JVM 原理。JVM 是 Java 程序运行基础&#xff0c;面试时一定会遇到 JVM 相关的题。本课时会先对面试中 JVM 的考察点进行汇总介绍。然后对 JVM 内存模型、Java 的类加载机制、常用的 GC 算法这三个知识点进行详细讲解。最后汇总 JVM 考察点和加分项&#xff0c;…