js原生写一个小小轮播案例

news2025/1/6 17:45:32

先上示例:

在这里插入图片描述

附上代码

  1. 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">
  <link rel="stylesheet" href="css/index.css">
  <script src="js/index.js"></script>
  <title>轮播图</title>
</head>

<body>
  <div class="container">
    <!-- 左侧按钮 -->
    <a href="#" class="arrow-l">&lt;</a>
    <!-- 右侧按钮 -->
    <a href="#" class="arrow-r">&gt;</a>
    <ul class="foucs">
      <li><a href="#"><img src="images/2.jpg" alt=""></a></li>
      <li><a href="#"><img src="images/3.jpg" alt=""></a></li>
      <li><a href="#"><img src="images/4.jpg" alt=""></a></li>
      <li><a href="#"><img src="images/6.jpg" alt=""></a></li>
    </ul>
    <ol class="circle">
    </ol>
  </div>

</body>

</html>
  1. js
document.addEventListener("DOMContentLoaded", carousel);

function carousel() {
  var container = document.querySelector(".container"),
    ul = document.getElementsByTagName('ul')[0],
    ol = document.getElementsByTagName('ol')[0],
    la = document.querySelector(".arrow-l"),
    ra = document.querySelector(".arrow-r"),
    len = ul.children.length,
    num = 0,
    flag = true,
    foucsWidth = container.offsetWidth;

  // 1.左右按钮显示隐藏
  container.addEventListener("mouseenter", lrblock);
  la.addEventListener("mouseenter", laenter);
  ra.addEventListener("mouseenter", laenter);
  container.addEventListener("mouseleave", lrnone);
  la.addEventListener("mouseleave", laleave);
  ra.addEventListener("mouseleave", laleave);
  function lrblock() {
    la.style.display = "block";
    ra.style.display = "block";
    clearInterval(autoPlay)
  }
  function lrnone() {
    la.style.display = "none";
    ra.style.display = "none";
    autoPlay = setInterval(function () {
      // 手动调用点击事件
      ra.click();
    }, 2000)
  }
  function laenter() {
    this.style.color = "red";
  }
  function laleave() {
    this.style.color = "#fff";
  }
  // 2.动态生成小圆点
  for (var i = 0; i < len; i++) {
    var li = document.createElement('li');
    li.setAttribute('index', i);
    ol.appendChild(li);
    ol.children[0].className = 'current';
    li.addEventListener('click', function () {
      for (var i = 0; i < ol.children.length; i++) {
        ol.children[i].className = ''
      }
      this.className = 'current';
      //3. 点击小圆点,移动图片 ul移动
      var index = this.getAttribute('index');
      num = index;
      animate(ul, -index * foucsWidth);
    })
  };
  // 4. 点击右侧按钮控制图片
  ra.addEventListener('click', function () {
    if (flag) {
      flag = false;
      num++;
      if (num === len) {
        ul.style.left = 0;
        num = 0;
      }
      animate(ul, - num * foucsWidth, function () {
        flag = true
      });
      // 5. 小圆点和图片对应
      for (var i = 0; i < len; i++) {
        ol.children[i].className = '';
      }
      ol.children[num].className = 'current';
    }
  })
  // 5. 点击左侧按钮控制图片
  la.addEventListener('click', function () {
    if (flag) {
      flag = false;
      num--;
      if (num < 0) {
        ul.style.left = (len - 1) * foucsWidth;
        num = len - 1;
      }
      animate(ul, - num * foucsWidth, function () {
        flag = true
      });
      // 5. 小圆点和图片对应
      for (var i = 0; i < len; i++) {
        ol.children[i].className = '';
      }
      ol.children[num].className = 'current';
    }

  })
  //  6. 自动播放
  var autoPlay = setInterval(function () {
    // 手动调用点击事件
    ra.click();
  }, 2000)
  // 动画函数
  function animate(obj, target, callback) {
    var timer = setInterval(function () {
      var step = (target - obj.offsetLeft) / 10;
      step = step > 0 ? Math.ceil(step) : Math.floor(step)
      if (obj.offsetLeft === target) {
        clearInterval(timer);
        callback && callback()
      }
      obj.style.left = obj.offsetLeft + step + 'px';
    }, 10)
  }
}
  1. css
* {
  margin: 0;
  padding: 0;
  list-style: none;
}
a {
  text-decoration: none;
}
.container {
  width: 800px;
  height: 400px;
  position: relative;
  left: 50px;
  top: 50px;
  overflow: hidden;
  background-color: brown;
  color: #fff;
  font-size: 20px;
}
.arrow-l,
.arrow-r {
  width: 60px;
  height: 50px;
  display: none;
  border-radius: 25px;
  position: absolute;
  top: calc(50% - 50px);
  z-index: 2;
  background-color: rgb(125, 148, 168, 0.5);
  text-align: center;
  line-height: 50px;
  color: #fff;
  font-size: 30px;
  font-weight: bold;
}
.arrow-l {
  left: -20px;
}
.arrow-r {
  right: -20px;
}
ul.foucs {
  width: 10000px;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
}
ul.foucs li {
  float: left;
}
ul.foucs li,
ul.foucs li img {
  width: 800px;
  height: 100%;
}
ol.circle {
  height: 30px;
  position: absolute;
  bottom: 0px;
  left: 40%;
  z-index: 2;
}
ol.circle li {
  width: 20px;
  height: 20px;
  border-radius: 10px;
  float: left;
  margin: 0 5px;
  background-color: #fff;
}
ol.circle li.current {
  background-color: blue;
}

  1. 主要文件结构
    在这里插入图片描述

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

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

相关文章

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元

西奥CHT-01软胶囊硬度测试仪&#xff1a;重塑行业标杆&#xff0c;引领硬度测试新纪元 在当今医药领域&#xff0c;软胶囊作为一种广泛应用的药品剂型&#xff0c;其品质的稳定性和安全性直接关系到患者的健康。而在确保软胶囊品质的各项指标中&#xff0c;硬度测试尤为关键。…

Bookends for Mac v15.0.2 文献书籍下载管理

Bookends Mac版可以轻松地将其导入参考 &#xff0c;并直接搜索和进口从数以百计的线上资料来源。Bookends Mac版使用内置在浏览器中下载参考与PDF格式的文件&#xff0c;或和/或网页的点击。 Bookends for Mac v15.0.2注册激活版下载 本文由 mdnice 多平台发布

云密码机的定义与特点

云密码机&#xff0c;作为云计算环境中保障数据安全的关键设备&#xff0c;其重要性不言而喻。它基于虚拟化技术&#xff0c;通过提供高性能的数据加解密、密钥管理等服务&#xff0c;确保云上数据的安全与隐私。下面&#xff0c;安策科技将从云密码机的定义、特点、应用场景以…

JAVA中的线程、死锁、异常

线程 Thread 一、程序 1&#xff0e;一段静态代码&#xff08;静态&#xff09; 二、进程 1&#xff0e;动态的&#xff0c;有开始&#xff0c;有结束&#xff1b;2&#xff0e;程序的一次执行过程&#xff0c;3&#xff0e;操作系统调度分配资源的最小单位&#xff1b; 三、…

图形渲染在AI去衣技术中的奇妙之旅

在这个数字化飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了我们生活中不可或缺的一部分。它像一位神秘的魔法师&#xff0c;以其不可思议的力量改变着我们的世界。今天&#xff0c;我要和大家探讨的&#xff0c;是一个颇具争议却技术含金量极高的话…

群晖上部署农场管理系统farmOS

什么是 farmOS &#xff1f; farmOS 是一个基于 Web 的应用程序&#xff0c;用于农场管理、规划和记录保存。它由志愿者社区开发&#xff0c;旨在为农民、开发人员和研究人员提供一个标准平台。 需要注意的是&#xff0c;群晖内核版本太低会遇到下面的错误&#xff0c;这个 AH0…

2024暨南大学校赛热身赛解析

文章目录 A 突发恶疾B Uzi 的真身C 时间管理大师D 基站建设E 在仙境之外weiwandaixu 题目地址 A 突发恶疾 斐波那契数列 fn [0]*1000006fn[0],fn[1] 0,1for i in range(2,1000002):fn[i] (fn[i-1]fn[i-2])%998244353n int(input()) print(fn[n])B Uzi 的真身 分析&#xff…

SSM【Spring SpringMVC Mybatis】——Maven

目录 1、为什么使用Maven 1️⃣获取jar包 2️⃣添加jar包 3️⃣使用Maven便于解决jar包冲突及依赖问题 2、什么是Maven 3、Maven基本使用 3.1 Maven准备 3.2 Maven基本配置 3.3 Maven之Helloworld 4、Maven及Idea的相关应用 4.1 将Maven整合到IDEA中 4.2 在IDEA中新建…

使用脚本一键部署项目的示例(脚本会创建syetemctl的系统服务)

文章目录 说明使用脚本一键部署本项目开启/停止服务开启/关闭开机自动运行更新项目 参考地址&#xff1a;https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tabreadme-ov-file 说明 后续相关项目可以使用这种方式创建脚本&#xff0c;脚本均放置在项目根目录下的bas…

【C++干货基地】揭秘C++STL库的魅力:stiring的初步了解和使用

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

AI大模型探索之路-训练篇17:大语言模型预训练-微调技术之QLoRA

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

动态规划——路径问题:LCR 166.珠宝的最高价值

文章目录 题目描述算法原理1.状态表示&#xff08;题目经验&#xff09;2.状态转移方程3.初始化4.填表顺序5.返回值 代码实现CJava 题目描述 题目链接&#xff1a;LCR 166.珠宝的最高价值 算法原理 1.状态表示&#xff08;题目经验&#xff09; 对于这种路径类的问题&…

Linux中动态库的用法及优缺点?怎样制作动态库和静态库?

一、什么是gcc gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台. 在 Linux…

在做题中学习(52): 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;二分查找 思路&#xff1a;O(logn)的时间复杂度&#xff0c;很可能是二分法&#xff0c;再看看有没有二段性&#xff1a; 由题目可以知道&#xff0c;i的左边比i小&#xff0c;右边比i大&am…

47.Redis学习笔记

小林coding -> 图解redis的学习笔记 文章目录 Rediswindwos安装docker安装redis启动redis使用RDM访问虚拟机中的redispython连接redis缓存穿透、击穿、雪崩基本数据类型高级数据类型高并发指标布隆过滤器分布式锁Redis 的有序集合底层为什么要用跳表&#xff0c;而不用平衡…

Spring_概述

Spring 官网Spring Framework&#xff08;Spring&#xff09;文档位置重点内容Overview 官网 Spring官网 Spring Framework&#xff08;Spring&#xff09; 文档位置 重点 IoC容器AOP&#xff1a;面向切面编程AOT&#xff1a;ahead of time&#xff0c;提前编译Web 框架&…

面试分享——订单超30分钟未支付自动取消用什么实现?如何使用Redis实现延迟队列?

目录 1.订单超时未支付自动取消&#xff0c;这个你用什么方案实现&#xff1f; 2.如何使用Redis实现延迟队列 2.1实验步骤 2.2实现生产可用的延迟队列还需关注什么 3.总结 电商场景中的问题向来很受面试官的青睐&#xff0c;因为业务场景大家都相对更熟悉&#xff0c;相关…

金仓面对面 | 人大金仓×安硕信息共话金融信用风险管理数字化转型之道

金仓面对面 在数字化浪潮的推动下&#xff0c;人大金仓携手行业先锋&#xff0c;共同开启一场关于创新与转型的思想盛宴——金仓面对面。这不仅是一场对话&#xff0c;更是一次智慧的火花碰撞&#xff0c;一次行业数字化转型洞察的深度挖掘。 行业精英汇聚&#xff1a;我们荣幸…

SSH的魅力:为何它成为远程访问的首选

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、SSH简介 2、SSH的历史与发展 3、SSH的主要用…

大学物理实验 期末复习笔记整理(个人复习笔记/侵删/有不足之处欢迎斧正)

一、误差和数据处理 1. 系统误差是指在重复性条件下&#xff0c;对同一被测量进行无限多次测量所得结果的平均值与被测量的真值之差。它通常是由于测量设备、测量方法或测量环境等因素引起的&#xff0c;具有重复性、单向性和可测性。而随机误差则是由于测量过程中一系列有关因…