HTMLCSS实现轮播图效果

news2025/4/21 20:31:10

这段代码实现了一个具有自动轮播、手动切换功能的图片轮播图,并且配有指示器(小圆点)来显示当前图片位置。轮播图可通过左右箭头按钮进行手动切换,也能自动定时切换,当鼠标悬停在轮播图上时,自动轮播会暂停,鼠标移开后继续。

代码详细分析
1. HTML 部分
<div class="box">
    <div class="wipper">
        <div><img src="../png/NTE_features1.jpg" alt="都市特色1" /></div>
        <div><img src="../png/NTE_features2.jpg" alt="都市特色2" /></div>
        <div><img src="../png/NTE_features3.jpg" alt="都市特色3" /></div>
        <div><img src="../png/NTE_features4.jpg" alt="都市特色4" /></div>
        <div><img src="../png/NTE_features5.jpg" alt="都市特色5" /></div>
        <div><img src="../png/NTE_features6.jpg" alt="都市特色6" /></div>
        <div><img src="../png/NTE_features1.jpg" alt="都市特色1" /></div>
    </div>
</div>
<div class="pre"></div>
<div class="next"></div>
<div class="lis">
    <span class="current"></span>
    <span class="current"></span>
    <span class="current"></span>
    <span class="current"></span>
    <span class="current"></span>
    <span class="current"></span>
</div>
  • .box 容器:作为轮播图的整体容器,用于包裹图片和控制溢出内容。
  • .wipper 容器:用来包含所有图片,通过改变其 transform 属性实现图片的滚动。
  • 图片元素:每个 <div> 中包含一张图片,为了实现无缝循环,最后一张图片重复第一张。
  • .pre 和 .next 按钮:分别作为上一张和下一张的切换按钮。
  • .lis 指示器:包含多个 <span> 元素,用于指示当前显示的图片位置。

2. CSS 部分

.box {
    width: 1120px;
    height: 530px;
    margin: 0px auto;
    margin-top: -60px;
    overflow: hidden;
    position: relative;
    border: 9px solid #585858;
}

.wipper {
    width: 8400px;
    height: 530px;
    position: absolute;
    left: 0;
}

.wipper div {
    width: 1200px;
    height: 650px;
    float: left;
    text-align: center;
}

.wipper div img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.lis {
    text-align: center;
    border-radius: 5px;
    position: absolute;
    bottom: -30px;
    left: 50%;
    transform: translateX(-50%);
}

.lis span {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background-color: #fff;
    margin: 0 5px;
    cursor: pointer;
}

.lis span.current {
    background-color: #e8e8e8;
}

 

  • .box 样式:设置轮播图容器的宽度、高度、边距、溢出处理和边框样式。
  • .wipper 样式:设置图片容器的宽度和高度,并将其定位为绝对定位,方便移动。
  • .wipper div 样式:设置每个图片容器的宽度、高度和浮动方式,使其水平排列。
  • .wipper div img 样式:设置图片的宽度、高度和填充方式,确保图片填满容器。
  • .lis 样式:设置指示器的位置和样式。
  • .lis span 样式:设置每个指示器小圆点的样式,包括大小、颜色和鼠标指针样式。
  • .lis span.current 样式:设置当前激活的指示器小圆点的样式。
3. JavaScript 部分

 

// 获取元素
var box = document.getElementsByClassName("box")[0];
var wipper = document.getElementsByClassName("wipper")[0];
var divs = wipper.getElementsByTagName("div");
var pre = document.getElementsByClassName("pre")[0];
var next = document.getElementsByClassName("next")[0];
var lis = document.getElementsByClassName("lis")[0];
var spans = lis.getElementsByTagName("span");

// 定义一个 index 保存当前图片索引
var index = 0;

// 下一张按钮点击事件
function nextClick() {
    index++;
    wipper.style.transition = "all .5s";
    wipper.style.transform = "translateX(" + -index * divs[0].offsetWidth + "px)";
    if (index == divs.length - 1) {
        index = 0;
        setTimeout(() => {
            wipper.style.transform = "translate(0,0)";
            wipper.style.transition = "none";
        }, 300);
    }
    for (var i = 0; i < spans.length; i++) {
        spans[i].className = "";
        spans[index].className = "current";
    }
}
next.onclick = nextClick;

// 上一张
function preClick() {
    index--;
    if (index == -1) {
        wipper.style.transform = "translateX(" + -5 * divs[0].offsetWidth + "px)";
        wipper.style.transition = "none";
        index = 4;
        setTimeout(() => {
            wipper.style.transform = "translateX(" + -index * divs[0].offsetWidth + "px)";
            wipper.style.transition = "all .5s";
        }, 0);
    } else {
        wipper.style.transform = "translateX(" + -index * divs[0].offsetWidth + "px)";
        wipper.style.transition = "all .5s";
    }
    for (var i = 0; i < spans.length; i++) {
        spans[i].className = "";
        spans[index].className = "current";
    }
}
pre.onclick = preClick;

// 自动轮播
var timer = setInterval(nextClick, 3000);

// 小圆点的点击事件
for (var i = 0; i < spans.length; i++) {
    (function (i) {
        spans[i].onclick = function () {
            var allSpans = this.parentNode.children;
            for (var j = 0; j < allSpans.length; j++) {
                allSpans[j].className = "";
            }
            this.className = "current";
            index = i;
            wipper.style.transform = "translateX(" + -index * divs[0].offsetWidth + "px)";
            wipper.style.transition = "all .5s";
        };
    })(i);
}

// 移入 box,清除定时器
box.onmouseenter = function () {
    clearInterval(timer);
};
// 移出 box,重新调用定时器
box.onmouseleave = function () {
    timer = setInterval(nextClick, 3000);
};
  • 获取元素:通过 document.getElementsByClassName 和 document.getElementsByTagName 方法获取所需的 HTML 元素。
  • 定义 index 变量:用于保存当前显示的图片索引。
  • nextClick 函数:处理下一张按钮的点击事件,增加 index 值,通过改变 wipper 的 transform 属性实现图片切换。当到达最后一张图片时,使用 setTimeout 函数实现无缝循环。同时更新指示器的样式。
  • preClick 函数:处理上一张按钮的点击事件,减少 index 值,处理到达第一张图片的情况,同样更新指示器的样式。
  • 自动轮播:使用 setInterval 函数定时调用 nextClick 函数,实现自动轮播。
  • 小圆点点击事件:为每个指示器小圆点添加点击事件,点击时更新 index 值和指示器样式,并切换到相应的图片。
  • 鼠标悬停处理:当鼠标移入轮播图时,清除定时器,暂停自动轮播;鼠标移出时,重新启动定时器。
总结

这段代码通过 HTML 构建轮播图的结构,CSS 设置样式,JavaScript 实现交互功能,包括手动切换、自动轮播和指示器更新。整体实现了一个功能完善、用户体验良好的图片轮播图。

 效果如图

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

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

相关文章

嵌入式学习——opencv图像库编程

环境配置 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和图像处理库&#xff0c;广泛用于各种计算机视觉任务&#xff0c;如图像处理、视频分析、人脸识别、物体检测、机器学习等。它提供了丰富的函数和工具&#xff0c;用于处理…

【每日八股】复习 MySQL Day1:事务

文章目录 复习 MySQL Day1&#xff1a;事务MySQL 事务的四大特性&#xff1f;并发事务会出现什么问题&#xff1f;MySQL 事务的隔离级别&#xff1f;不同事务隔离级别下会发生什么问题&#xff1f;MVCC 的实现原理&#xff1f;核心数据结构版本链构建示例可见性判断算法MVCC 可…

外接键盘与笔记本命令键键位不同解决方案(MacOS)

文章目录 修改键位第一步&#xff1a;打开设置第二步&#xff1a;进入键盘快捷键第三步&#xff1a;修改修饰键设置第四步&#xff1a;调整键位第五步&#xff1a;保存设置tips ikbc c87键盘win键盘没反应的解决亲测的方法这是百度的答案标题常规组合键尝试‌&#xff1a;型号差…

kotlin知识体系(五) :Android 协程全解析,从作用域到异常处理的全面指南

1. 什么是协程 协程(Coroutine)是轻量级的线程&#xff0c;支持挂起和恢复&#xff0c;从而避免阻塞线程。 2. 协程的优势 协程通过结构化并发和简洁的语法&#xff0c;显著提升了异步编程的效率与代码质量。 2.1 资源占用低&#xff08;一个线程可运行多个协程&#xff09;…

vscode stm32 variable uint32_t is not a type name 问题修复

问题 在使用vscodekeil开发stm32程序时&#xff0c;发现有时候vscode的自动补全功能失效&#xff0c;且problem窗口一直在报错。variable “uint32_t” is not a type name uint32_t 定义位置 uint32_t 实际是在D:/Keil_v5/ARM/ARMCC/include/stdint.h中定义的。将D:/Keil_v5…

Formality:Bug记录

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文记录博主在使用Synopsys的形式验证工具Formality中遇到的一个Bug。 Bug复现 情况一 // 例1 module dff (input clk, input d_in, output d_out …

【java+Mysql】学生信息管理系统

学生信息管理系统是一种用于管理学生信息的软件系统&#xff0c;旨在提高学校管理效率和服务质量。本课程设计报告旨在介绍设计和实现学生信息管理系统的过程。报告首先分析了系统的需求&#xff0c;包括学生基本信息管理、成绩管理等功能。接着介绍了系统的设计方案&#xff0…

小白从0学习网站搭建的关键事项和避坑指南(2)

以下是针对小白从零学习网站搭建的 进阶注意事项和避坑指南&#xff08;第二期&#xff09;&#xff0c;覆盖开发中的高阶技巧、常见陷阱及解决方案&#xff0c;帮助你在实战中提升效率和质量&#xff1a; 一、进阶技术选型避坑 1. 前端框架选择 误区&#xff1a;盲目追求最新…

Windows 10 上安装 Spring Boot CLI详细步骤

在 Windows 10 上安装 Spring Boot CLI 可以通过以下几种方式完成。以下是详细的步骤说明&#xff1a; 1. 手动安装&#xff08;推荐&#xff09; 步骤 1&#xff1a;下载 Spring Boot CLI 访问 Spring Boot CLI 官方发布页面。下载最新版本的 .zip 文件&#xff08;例如 sp…

vue2技术练习-开发了一个宠物相关的前端静态商城网站-宠物商城网站

为了尽快学习掌握相关的前端技术&#xff0c;最近又实用 vue2做了一个宠物行业的前端静态网站商城。还是先给大家看一下相关的网站效果&#xff1a; 所以大家如果想快速的学习或者掌握一门编程语言&#xff0c;最好的方案就是通过学习了基础编程知识后&#xff0c;就开始利用…

嵌入式学习——远程终端登录和桌面访问

目录 通过桥接模式连接虚拟机和Windows系统 1、桥接模式 2、虚拟机和Windows连接&#xff08;1&#xff09; 3、虚拟机和Windows连接&#xff08;2&#xff09; 在Linux虚拟机中创建新用户 Windows系统环境下对Linux系统虚拟机操作 远程登录虚拟机&#xff08;1&#xff…

如何新建一个空分支(不继承 master 或任何提交)

一、需求分析&#xff1a; 在 Git 中&#xff0c;我们通常通过 git branch 来新建分支&#xff0c;这些分支默认都会继承当前所在分支的提交记录。但有时候我们希望新建一个“完全干净”的分支 —— 没有任何提交&#xff0c;不继承 master 或任何已有内容&#xff0c;这该怎么…

Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门

一、前言 在推流领域&#xff0c;尤其是监控行业&#xff0c;现在主流设备基本上都是265格式的视频流&#xff0c;想要在网页上直接显示监控流&#xff0c;之前的方案是&#xff0c;要么转成hls&#xff0c;要么魔改支持265格式的flv&#xff0c;要么265转成264&#xff0c;如…

[第十六届蓝桥杯 JavaB 组] 真题 + 经验分享

A&#xff1a;逃离高塔(AC) 这题就是简单的签到题&#xff0c;按照题意枚举即可。需要注意的是不要忘记用long&#xff0c;用int的话会爆。 &#x1f4d6; 代码示例&#xff1a; import java.io.*; import java.util.*; public class Main {public static PrintWriter pr ne…

深⼊理解 JVM 执⾏引擎

深⼊理解 JVM 执⾏引擎 其中前端编译是在 JVM 虚拟机之外执⾏&#xff0c;所以与 JVM 虚拟机没有太⼤的关系。任何编程语⾔&#xff0c;只要能够编译出 满⾜ JVM 规范的 Class ⽂件&#xff0c;就可以提交到 JVM 虚拟机执⾏。⾄于编译的过程&#xff0c;如果你不是想要专⻔去研…

iwebsec靶场 文件包含关卡通关笔记11-ssh日志文件包含

目录 日志包含 1.构造恶意ssh登录命令 2.配置ssh日志开启 &#xff08;1&#xff09;配置sshd &#xff08;2&#xff09;配置rsyslog &#xff08;3&#xff09;重启服务 3.写入webshell木马 4.获取php信息渗透 5.蚁剑连接 日志包含 1.构造恶意ssh登录命令 ssh服务…

kafka菜鸟教程

一、kafka原理 1、kafka是一个高性能的消息队列系统&#xff0c;能够处理大规模的数据流&#xff0c;并提供低延迟的数据传输&#xff0c;它能够以每秒数十万条消息的速度进行读写操作。 二、kafka优点 1、服务解耦 &#xff08;1&#xff09;提高系统的可维护性‌ 通过服务…

应用镜像是什么?轻量应用服务器的镜像大全

应用镜像是轻量应用服务器专属的&#xff0c;镜像就是轻量应用服务器的装机盘&#xff0c;应用镜像在原有的纯净版操作系统上集成了应用程序&#xff0c;例如WordPress应用镜像、宝塔面板应用镜像、WooCommerce等应用&#xff0c;阿里云服务器网aliyunfuwuqi.com整理什么是轻量…

深入理解分布式缓存 以及Redis 实现缓存更新通知方案

一、分布式缓存简介 1. 什么是分布式缓存 分布式缓存&#xff1a;指将应用系统和缓存组件进行分离的缓存机制&#xff0c;这样多个应用系统就可以共享一套缓存数据了&#xff0c;它的特点是共享缓存服务和可集群部署&#xff0c;为缓存系统提供了高可用的运行环境&#xff0c…

Spring Boot 中的自动配置原理

2025/4/6 向全栈工程师迈进&#xff01; 一、自动配置 所谓的自动配置原理就是遵循约定大约配置的原则&#xff0c;在boot工程程序启动后&#xff0c;起步依赖中的一些bean对象会自动的注入到IOC容器中。 在讲解Spring Boot 中bean对象的管理的时候&#xff0c;我们注入bean对…