轮播图的多种实现及原理

article/2025/9/23 12:12:53

【写在前面】

        最近,在自己的项目中遇到了很多轮播图。

        当然,这里的很多,并非数量多,指的是种类很多,即多种实现。

        然后我觉得有不少小技巧,就决定写一篇文章讲解一下。

        本篇主要内容:

        1、轮播图的多种实现( 含动态图 )。

        2、效果对比和更好的建议。


【正文开始】

  • 实现一

        相当常见且简单的实现方法:

        1、将所有的图片并排。

        2、依次平移即可。

        HMTL 和 CSS部分:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>轮播图</title><style>ul,ol {list-style: none;padding: 0px;margin: 0px;}#main {width: 600px;height: 350px;margin: 30px auto;position: relative;}#display {width: 600px;height: 350px;overflow: hidden;position: relative;-webkit-user-select: none;}#display ul {position: relative;left: 0;top: 0px;width: 3600px;height: 350px;transition: left 500ms linear;}#list li {float: left;width: 600px;height: 350px;}#arrow {display: none;}#arrow span {position: absolute;width: 40px;height: 40px;line-height: 40px;left: 5px;top: 50%;margin-top: -20px;background: #000;cursor: pointer;text-align: center;font-weight: bold;font-family: 黑体, SimHei;font-size: 30px;color: #fff;opacity: 0.4;border: 1px solid #fff;-webkit-user-select: none;}#arrow span:hover {opacity: 0.7;}#arrow #right {right: 5px;left: auto;}#index_container {position: absolute;width: 210px;height: 30px;right: 20px;bottom: 20px;}#index_container .index {float: left;width: 30px;height: 30px;line-height: 30px;text-align: center;opacity: 0.8;background: #fff;border: 1px solid #ccc;margin-left: 10px;cursor: pointer;-webkit-user-select: none;}#index_container .current {background: #ec3d3d;}</style><script></script>
</head>
<body><div id="main"><div id="display"><ul id="list"><li><img src="images/0.jpg" width="600" height="350"/></li><li><img src="images/1.jpg" width="600" height="350"/></li><li><img src="images/2.jpg" width="600" height="350"/></li><li><img src="images/3.jpg" width="600" height="350"/></li><li><img src="images/4.jpg" width="600" height="350"/></li></ul><ol id="index_container"></ol><div id="arrow"><span id="left" title="前一张"><</span><span id="right" title="后一张">></span></div></div></div>
</body>
</html>

        其中 <script> 部分: 

window.onload = () => {let list = document.getElementById('list');let ol = document.getElementsByTagName('ol')[0];let display = document.getElementById('display');let currentIndex = 0;let autoPlay = () => {window.autoPlay = true;window.autoPlayTimer = setInterval(() => move((currentIndex + 1) % 5), 2000);}let stopPlay = () => {if (window.autoPlay) {window.autoPlay = false;clearInterval(window.autoPlayTimer);}}//创建索引按钮for (let i = 0; i < 5; i++) {let li = document.createElement('li');li.textContent = String(i + 1);li.className = 'index';if (i == 0) li.className += ' current';li.index = i;ol.appendChild(li);li.addEventListener('mouseover', function() {move(this.index);stopPlay();});}let arrow = document.getElementById('arrow');let showArrow = () => arrow.style.display = 'block';let hideArrow = () => arrow.style.display = 'none';//核心move函数let move = (index) => {let width = display.offsetWidth;for (let i = 0; i < 5; i++) {//改变当前索引按钮if ((index % 5) === i) {ol.children[i].className = 'index current';} else ol.children[i].className = 'index';}//移动listslist.style.left = (-index) * width + 'px';currentIndex = index;}display.addEventListener('mouseover', showArrow)display.addEventListener('mouseleave', () => {hideArrow();if (!window.autoPlay) {//重新开始自动播放autoPlay();}})let left = document.getElementById('left');let right = document.getElementById('right');left.addEventListener('click', () => {move((currentIndex - 1) === -1 ? 4 : currentIndex - 1);stopPlay();});right.addEventListener('click', () => {move((currentIndex + 1) % 5);stopPlay();});//启动自动播放move(0);autoPlay();
}

        关键部分为 move() 函数,即平移整个轮播图像列表( 根据跳转索引 index )。

        效果如下:

  • 实现二( 代码见结语 ):

        1、将所有图片叠在一起。

        2、如果为当前图片则设置 ( z-index ),使其在最顶层。

        3、使用 opacity 过渡代替方法一中的平移过渡( left ):

        效果如下:

  •  实现三:

        先来看看去掉 overflow: hidden 后的效果:

        1、将所有图像复制一轮后并排。

        2、同方法一,依次平移。

        3、重要:平移一轮到复制的图像的第一张[ 结束后 ] ,立即将 left 设置为 0px ( 我这里用了 jquery,也可不用 )

        效果如下:


【结语】

        呼~偷了个懒,实现一和实现二的代码在:GitHub - mengps/Web-jx: 模仿京东首页,纯css3+h5+js+jq

        话说这个项目有相当多的小技巧( css3 和 js ),请多多 star 呀..⭐_⭐

        最后来总结一下:

        实现一:优点是简单缺点是不够连贯,且首尾没有无缝滚动

        实现二:优点是过渡平滑,相隔几个切换也相当丝滑缺点是不够好看,视觉效果差了点

        实现三:优点是无缝滚动,也相当丝滑基本没有什么缺点


http://chatgpt.dhexx.cn/article/uWoP5vcg.shtml

相关文章

网页轮播图(详细版)

在网页中&#xff0c;我们经常会看到各种轮播图的效果&#xff0c;它们到底是怎样实现的呢&#xff1f;今天&#xff0c;我们就一起来看一下&#xff01;首先&#xff0c;我们需要准备若干张图片&#xff0c;在这里我准备了五张图片。 功能需求&#xff1a; 鼠标经过轮播图模块…

轮播图 (无缝轮播图)

1.无缝轮播核心: 在最后多加一张第一张图, 当达到最后一张t1的时候 一瞬间将ul拉回到0的位置 结构&#xff1a; <div class"wrap"><ul><li><img src"./image/t1.png" alt""></li><li><img src"./i…

JS来实现轮播图(走马灯)可左右切换图片,鼠标移入会停止轮播

效果一&#xff1a; 会自动进行轮播&#xff0c;当鼠标进入轮播图区域会停止轮播&#xff0c;点击左右箭头可以向前、向后进行切换图片 效果二&#xff1a; 这种效果比第一种效果简单&#xff0c;只要删除一些代码和修改一些样式即可。 实现原理 轮播图整体是放在ul里的&…

oracle nvl函数 mysql_关于Oracle数据库中的nvl函数

以前将数据库查询结果展示在页面时&#xff0c;对于值null的字段&#xff0c;总是要判断下&#xff0c;如果为null&#xff0c;就显示ldquo;rdquo;&#xff0c;突然发现这个方法好笨 以前将数据库查询结果展示在页面时&#xff0c;对于值null的字段&#xff0c;总是要判断下&am…

nvl 函数初识

根据bi业务逻辑写sql时&#xff0c;在写法上有些区别&#xff0c;我习惯用case when &#xff0c;没有用过nvl所以试一试 bi某一列的业务如下&#xff1a; 我用sql分别试了case when 和 nvl &#xff0c;得到的结果是一致的 &#xff0c; 使用nvl函数的部分sql&#xff1a; …

MySQL中创 NVL 函数

NVL的定义 NVL(s1, s2)&#xff1a;当s1为null时&#xff0c;返回s2&#xff0c;否则返回s1。 SELECT NVL(S, R) FROM DUAL; -- S SELECT NVL(NULL, R) FROM DUAL; -- RNVL方法的兼容策略 第一种&#xff1a;用 case when 代替 NVL&#xff0c;这种方法代码改造量较大&am…

Xp 激活

2019独角兽企业重金招聘Python工程师标准>>> 为了在xp下测试一键安装 支持多语言、多用户、多数据库、完美URL之路过秋天版博客发布[绝对有杀伤力的博客] 这两天为xp激活折腾了不少时间,在不断用ghost还原来还原去的,原因就是我有一张OEM版本的系统,正常方式的…

Windows XP Professional With SP3 VOL[MSDN原版]+正版密钥

Windows XP Professional简体中文版,这是一个中国人最熟悉不过的操作系统了(也有人称它一个最适合中国人的操作系统)。Windows XP 由于其出色的安全性、可靠性、易用性、高性能,使它获得了巨大的成功,直至今天它仍然是全球使用率最高的操作系统。 下面我们来说说…

Windows.XP.x64.Pro.VOL(WINXP64位企业版)+正版序列号

Windows.XP.x64.Pro.VOL(WINXP64位企业版)的设计初衷是&#xff1a;满足机械设计和分析、三维动画、视频编辑和创作以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户的需求。 专用技术应用程序的性能优势 64 位计算性能在汽车或飞机设计等领域体现出优势…

如何查看XP系统的密匙

最近有网友提问IT视窗小编说他家现在用的是xp系统&#xff0c;如何查看XP系统的密匙呢。其实查看XP系统密匙还是比较的简单的&#xff0c;小编就把查看XP系统密匙的两种方法都写成教程分享给大家。下面就是小编作为大神教你如何查看XP系统的密匙。希望大家都喜欢我的教程。 1、…

IDEA 使用 README.md 介绍项目

IDEA 使用 README.md 介绍项目 文章目录 一.前言二.IDEA创建Markdown文件1.新建文件- 1.1.创建README.md文件 2.编辑md文件常用语法2.1.定义标题字号2.2. 文字样式2.2.1.文字斜体2.2.2.文字加粗2.2.3.文字删除线2.2.4. 引用文本 2.3.列表样式2.3.1 无符号列表2.3.2. 有符号列表…

Github美化README

GITHUB中的MD文件 在github中新建一个仓库Create a new repository时会有一个README文件&#xff0c;其实为自述文件&#xff0c;介绍这个仓库的基本概要。这个文件也是MD文件&#xff0c;可用软件typora和vscode等md软件进行拟写就行了。也是下面介绍的第三种方法。 编写方式…

README.md文件的作用及其文件内容的语法

README.md文件一般出现在项目的根目录下&#xff0c;其作用是对项目的主要信息进行描述。 如果一个项目你很长时间都没有动&#xff0c;突然你需要修改这个项目&#xff0c;那么通过README.md中对项目的描述能让你快速的再次上手&#xff1b; 或者别人拿到你的项目也能通过READ…

原来Github上的README.md文件这么有意思——Markdown语言详解

转载请注明出处&#xff1a;http://blog.csdn.net/zhaokaiqiang1992 之前一直在使用github&#xff0c;也在上面分享了不少的项目和Demo&#xff0c;每次创建新项目的时候&#xff0c;使用的都是默认的README.md文件&#xff0c;也不曾对这个文件有过什么了解。但是在看到别人写…

如何规范写出 README 模板?

README 标准是由 RichardLitt 发起&#xff0c;十多名开发者共同贡献完成的&#xff0c;在 GitHub 上有 1230 Star&#xff1a;standard-readme 标准 README 实例&#xff1a; standard-readme/tree/main/example-readmes奖励&#xff1a;实例 本文模板获取地址&#xff1a;…

GitHub README-Template.md - README.md 模板

GitHub README-Template.md - README.md 模板 A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 # Project TitleOne Paragraph of project description goes here## Getting StartedThese instructions will get you a copy o…

怎么写一个超棒的 README 文档

点击上方 Java后端&#xff0c;选择 设为星标 优质文章&#xff0c;及时送达 大数据文摘出品 来源&#xff1a;medium 编译&#xff1a;青柠 如果你很着急、只是想要模板&#xff0c;可以直接跳到底部&#xff08;但这样一点不酷&#xff09;&#xff0c;准备酷的人&#xff0c…

【工具推荐】最简单方法创建 README

CSDN话题挑战赛第1期 活动详情地址&#xff1a;https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题&#xff1a;程序员常用小工具推荐 话题描述&#xff1a;俗话说&#xff0c;工欲善其事&#xff0c;必先利其器。作为每天和各种开发工具打交道的程序…

编写规范的readme文件

为什么要写这篇博客&#xff1f; 其实我是一个入坑已经半年的程序员&#xff0c;因为不是计算机专业&#xff0c;只能自己摸索&#xff0c;所以我深知博客的重要性。每次我的学习笔记啊&#xff0c;项目的&#xff0c;面试题啊&#xff0c;有的&#xff0c;只要有时间&#xff…

如何写好github上的README

项目名称&#xff08;超大字体或者是图片形式&#xff09; 这里再写一句骚气又精准的话描述你的项目吧 上手指南 写几句这样的话概括接下来的内容&#xff1a;以下指南将帮助你在本地机器上安装和运行该项目&#xff0c;进行开发和测试。关于如何将该项目部署到在线环境&…