【HTML】制作一个简易图片轮播器

news/2024/10/19 3:27:39/

1. 轮播器效果图

1. 正常状态下每 1.5秒 自动轮播下张图片,轮播结束从头开始重复

在这里插入图片描述

2. 鼠标悬停时停止轮播,可以选择左右图片切换

在这里插入图片描述

2. HTML 结构

  1. 文档类型声明<!DOCTYPE html> 声明文档类型为HTML5。
  2. HTML标签<html lang="zh-CN"> 表示这是一个中文的HTML文档。
  3. 头部<head> 标签内包含了文档的元数据。
    • <meta charset="UTF-8"> 指定文档的字符编码为UTF-8。
    • <meta name="viewport" content="width=device-width, initial-scale=1.0"> 用于优化移动设备上的显示效果。
    • <title> 标签定义了文档的标题,这里为“Picture carousel”。
  4. 样式<style> 标签内定义了CSS样式,用于美化轮播图。
  5. 主体<body> 标签内包含了页面的所有内容。
    • .slider 类定义了轮播图的整体样式和位置。
    • .slide-track 类定义了包含所有幻灯片的轨道。
    • .slide 类定义了单个幻灯片的样式。
    • .prev.next 类定义了上一张和下一张图片的控制按钮样式。
    • .indicators 类定义了轮播指示器的容器样式。
    • .indicator 类定义了单个指示器的样式。
  6. 图片和按钮
    • <div class="slide"> 标签包含了图片。
    • <span class="prev"><span class="next"> 是控制按钮,点击时调用JavaScript函数 moveSlide
  7. 指示器容器<div class="indicators"></div> 用于存放指示器。

3. CSS 样式

  • .slider:定义了轮播图容器的宽度、边距、溢出隐藏、相对定位和阴影效果。
  • .slide-track:定义了轨道的布局方式(不换行)、过渡效果和将改变的内容(优化性能)。
  • .slide:定义了幻灯片的大小、背景、文字样式和过渡效果。
  • .slide img:定义了图片的填充方式,使其覆盖整个幻灯片区域。
  • .prev, .next:定义了控制按钮的基本样式,包括指针、定位、颜色、背景和过渡效果。
  • .slider:hover .prev, .slider:hover .next:定义了鼠标悬停时控制按钮的透明度。
  • .indicators:定义了指示器容器的位置和文本对齐方式。
  • .indicator:定义了单个指示器的大小、边距、背景色、圆角和指针样式。
  • .indicator.active:定义了激活状态下的指示器背景色。

4. JavaScript 脚本

  • 变量定义:定义了当前索引、幻灯片元素、总幻灯片数、幻灯片宽度和相关DOM元素。
  • 创建指示器:循环创建指示器,并为每个指示器添加点击事件,用于切换幻灯片。
  • 更新幻灯片位置updateSlidePosition 函数根据当前索引更新幻灯片轨道的位置。
  • 更新指示器状态updateIndicators 函数用于更新指示器的激活状态。
  • 移动幻灯片moveSlide 函数用于根据传入的方向参数来更新当前索引,并调用更新函数。
  • 自动轮播:设置定时器 autoSlideInterval,每隔一定时间自动切换幻灯片。
  • 鼠标悬停事件:为轮播图容器添加鼠标悬停事件监听器,用于在鼠标悬停时停止自动轮播,在鼠标离开时重新开始。

4. 源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Picture carousel</title><style>.slider {width: 600px;margin: 50px auto;overflow: hidden;position: relative;box-shadow: 0 4px 10px rgba(0,0,0,0.4);}.slide-track {white-space: nowrap;transition: transform 0.5s ease-in-out;will-change: transform;}.slide {display: inline-block;width: 600px;height: 300px;background: #000;color: #fff;text-align: center;line-height: 300px;font-size: 30px;transition: opacity 0.5s ease-in-out;}.slide img {width: 100%;height: 100%;object-fit: cover;}.prev, .next {cursor: pointer;position: absolute;top: 50%;transform: translateY(-50%);font-size: 18px;color: white;background: rgba(0, 0, 0, 0.5);padding: 10px;z-index: 100;opacity: 0;transition: opacity 0.3s ease-in-out;}.next {right: 0;}.slider:hover .prev,.slider:hover .next {opacity: 1;}.indicators {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);text-align: center;}.indicator {display: inline-block;width: 10px;height: 10px;margin: 0 5px;background-color: #bbb;border-radius: 50%;cursor: pointer;}.indicator.active {background-color: #717171;}</style>
</head>
<body><div class="slider"><div class="slide-track"><!-- 这里替换为自己的图片地址 --><div class="slide"><img src="./CSS.jpg" alt="Image 1"></div><div class="slide"><img src="./nginx.jpg" alt="Image 2"></div><div class="slide"><img src="./ssl.jpg" alt="Image 3"></div><!-- 可以继续添加更多图片 --></div><span class="prev" onclick="moveSlide(-1)">&#10094;</span><span class="next" onclick="moveSlide(1)">&#10095;</span><div class="indicators"></div></div><script>javascript">let currentIndex = 0;const slides = document.querySelectorAll('.slide');const totalSlides = slides.length;const slideWidth = 600; // 根据图片宽度设置const slideTrack = document.querySelector('.slide-track');const indicatorsContainer = document.querySelector('.indicators');// 创建指示器for (let i = 0; i < totalSlides; i++) {const indicator = document.createElement('div');indicator.classList.add('indicator');if (i === 0) indicator.classList.add('active');indicator.addEventListener('click', () => {currentIndex = i;updateSlidePosition();updateIndicators();});indicatorsContainer.appendChild(indicator);}function updateSlidePosition() {slideTrack.style.transform = `translateX(-${currentIndex * slideWidth}px)`;}function updateIndicators() {document.querySelectorAll('.indicator').forEach((indicator, index) => {if (index === currentIndex) {indicator.classList.add('active');} else {indicator.classList.remove('active');}});}function moveSlide(direction) {currentIndex += direction;if (currentIndex >= totalSlides) {currentIndex = 0;} else if (currentIndex < 0) {currentIndex = totalSlides - 1;}updateSlidePosition();updateIndicators();}// 自动轮播let autoSlideInterval = setInterval(() => {moveSlide(1);}, 2500); // 设置轮播间隔为 2秒// 鼠标悬停时停止自动轮播const slider = document.querySelector('.slider');slider.addEventListener('mouseenter', () => clearInterval(autoSlideInterval));slider.addEventListener('mouseleave', () => autoSlideInterval = setInterval(() => moveSlide(1), 2000));// 初始化轮播位置updateSlidePosition();</script>
</body>
</html>

http://www.ppmy.cn/news/1538932.html

相关文章

一文了解:大型语言模型(LLMs)中的偏见、毒性以及破解

咱们今天聊聊那些大型语言模型&#xff0c;比如ChatGPT和GPT-4&#xff0c;它们可能会有偏见&#xff0c;有时候还会说出一些不好听的话。这些模型之所以会这样&#xff0c;是因为它们是用网上的数据训练出来的&#xff0c;网上啥样的内容都有&#xff0c;好的坏的全都有。虽然…

【系统方案】智慧城市大数据平台建设方案(Word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

安卓13屏蔽蓝牙匹配对话框 自动匹配 android13屏蔽蓝牙匹配对话框 自动匹配

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 蓝牙连接的时候,会有匹配对话框提示。我们来实现自动配对。 2.问题分析 这里我们是通过点击操作来实现功能的,所以我们思路可以是自动点击功能的实现。 3.代码分…

国外电商系统开发-运维系统资产信息

上面讲述了自定义资产&#xff0c;当然。不管您是否需要定义自定义资产&#xff0c;那么系统都会每间隔30分钟后去自动采集数据&#xff0c;采集的数据就会显示到这里来。那么被采集的服务器是从哪里来的呢&#xff1f;当然是您在【主机配置】的时候&#xff0c;输入了主机的账…

独家创作YOLOv8韭菜检测系统(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.简介&#xff1a;资源包含可视化的韭菜检测系统&#xff0c;可检测图片和视频当中出现的韭菜&#xff0c;以及自动开启摄像头&#xff0c;进行韭菜检测。基于最新的YOLO-v8训练的韭菜检测模型和完整的python代码以及韭菜的训练数据&#xff0c;下载后即可运行。 2.文件夹介绍…

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步&#xff0c;VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件&#xff0c;摄影师能够创作出沉浸式的360度全景作品&#xff0c;为观众提供身临其境的视觉体验。在这篇文章中&#xff0c;我们将介绍VR全景摄影的相关…

SpringBoot技术在人事管理中的应用:系统开发全解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

狄拉克函数的辅助函数

文章 介绍了 狄拉克函数的基本性质 。本文介绍相应的辅助函数,即实现狄拉克函数的方法。 1. 狄拉克函数的辅助函数 按照 狄拉克函数的基本性质 (记为文1)中给出的狄拉克函数两个基本性质,我们可以考虑一个定义在区间 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞)上的函…