使用 HTML、CSS 和 JavaScript 创建图像滑块
使用 HTML、CSS 和 JavaScript 创建轮播图
在本文中,我们将讨论如何使用 HTML、CSS 和 JavaScript 构建轮播图。我们将演示两种不同的创建滑块的方法,一种是基于opacity的滑块,另一种是基于transform的。
创建 HTML
我们首先从 HTML 代码开始:
<div class="slider"><div class="slide"><img src="images/1.jpg" alt="demo image" /></div><div class="slide"><img src="images/2.jpg" alt="demo image" /></div>. . .<a class="prev" onclick="prevSlide()"><</a><a class="next" onclick="nextSlide()">></a>
</div>
.slider元素充当整个图像滑块的容器。
单独的幻灯片.slide元素与图像一起封装在容器中。
滑块导航由.prev、.next两个按钮元素控制。
我们还为导航设置了onclick事件监听器,当点击它们时,相应的 JavaScript 函数将被激活。
添加样式
为了更轻松地设置元素样式,建议删除所有元素的默认内边距和边距,并将其box-sizing属性设置为border-box。这允许根据元素的尺寸border-box而不是content-box来调整元素的大小。
* {padding: 0px;margin: 0px;box-sizing: border-box;
}
然后添加.slider样式。
.slider {width: 500px;height: 300px;margin: auto;overflow: hidden;transform: translateY(50%);
}
以及.slide。
.slide {position: absolute;top: 50%;transform: translateY(-50%);
}img {width: 100%;height: auto;
}
最后,我们还将导航按钮放置在.slider容器的左侧和右侧。
.prev,
.next {cursor: pointer;background-color: #333;color: #fff;padding: 10px 20px;position: absolute;top: 50%;transform: translateY(-50%);text-decoration: none;
}.prev {left: 0;
}.next {right: 0;
}
添加 JavaScript 代码
现在,让我们仔细看看.slide样式。
.slide {position: absolute;top: 50%;transform: translateY(-50%);
}
通过使用position: absolute,我们将所有.slide元素放置在一个位置,彼此堆叠。我们可以使用浏览器中的开发人员工具进行验证。

基于opacity的滑块
现在我们需要做的就是将当前幻灯片的opacity设为100,同时将所有其他幻灯片的opacity设为0。
为了实现幻灯片效果,我们可以编写 JavaScript 代码,以便每当单击导航链接时,“当前幻灯片”都会相应调整。
我们首先将所有幻灯片的opacity设置0。
.slide {position: absolute;top: 50%;transform: translateY(-50%);opacity: 0;transition: opacity 1s ease;
}
然后添加以下 JavaScript 代码。
const slides = document.querySelectorAll(".slide");
let currentSlide = 0;function showSlide(index) {slides.forEach((slide, i) => {if (i === index) {slide.style.opacity = 100;} else {slide.style.opacity = 0;}});
}function nextSlide() {currentSlide = (currentSlide + 1) % slides.length;showSlide(currentSlide);
}function prevSlide() {currentSlide = (currentSlide - 1 + slides.length) % slides.length;showSlide(currentSlide);
}showSlide(currentSlide);
第 1 行选择所有.slide,并将它们分配给变量slides。
第 2 行将变量初始化currentSlide为0,它指向图像滑块中的第一张幻灯片。
现在,我们来看看nextSlide()函数。
function nextSlide() {currentSlide = (currentSlide + 1) % slides.length;showSlide(currentSlide);
}
在本例中,slides.length给出了滑块中幻灯片的总数,当执行此函数(通过单击链接.next)时,currentSlide将进行相应调整。
例如,当函数第一次执行时,假设总共有 5 张幻灯片:
currentSlide = (0 + 1) % 5 = 1
但当执行第五次时,currentSlide将重置回0。
currentSlide = (4 + 1) % 5 = 0
prevSlide()函数的工作原理类似。
function prevSlide() {currentSlide = (currentSlide - 1 + slides.length) % slides.length;showSlide(currentSlide);
}
当currentSlide是4时,它指向第五张幻灯片:
currentSlide = (4 - 1 + 5) % 5 = 3
当currentSlide是0时,它指向第一张幻灯片:
currentSlide = (0 - 1 + 5) % 5 = 4
然后变量currentSlide将作为showSlide()的参数index
function showSlide(index) {slides.forEach((slide, i) => {if (i === index) {slide.style.opacity = 100;} else {slide.style.opacity = 0;}});
}
此函数迭代存储在slides中的所有幻灯片,如果迭代索引 ( i) 与currentSlide索引 ( index) 匹配,则该幻灯片将被设置opacity为100。如果没有,那opacity就是0。
基于transform
我们将其称为图像滑块,但从最终结果中可以看到,没有太多滑动,因为过渡是基于不透明度的。我们如何调整代码,以便当单击导航链接时,图像实际上滑到下一个?
我们必须进行两项更改。首先,.slide 必须水平排列在.slider容器后面,而不是相互堆叠。我们可以将.slider容器视为一个窗口。每次单击链接时,.slide 都会向左或向右移动以显示上一张或下一张图像。
.slider {width: 500px;height: 300px;margin: auto;overflow: hidden;transform: translateY(50%);display: flex;align-items: center;
}.slide {flex: 0 0 100%;transition: transform 1s ease;
}
我们使用弹性布局来实现这种效果。flex: 0 0 100%将每个slide的宽度设置为100%。
接下来,调整showSlide()功能。
function showSlide(index) {slides.forEach((slide, i) => {const slideWidth = slide.clientWidth;slide.style.transform = `translateX(-${index * slideWidth}px)`;});
}
再次假设总共有五张幻灯片,并且每张幻灯片都是500px宽。当索引为3时,index * slideWidth将是1500,并将translateX(-1500px)所有.slide 向左移动1500像素,显示第四个图像。
相关文章:
使用 HTML、CSS 和 JavaScript 创建图像滑块
使用 HTML、CSS 和 JavaScript 创建轮播图 在本文中,我们将讨论如何使用 HTML、CSS 和 JavaScript 构建轮播图。我们将演示两种不同的创建滑块的方法,一种是基于opacity的滑块,另一种是基于transform的。 创建 HTML 我们首先从 HTML 代码开…...
ubuntu环境删除qtcreator方法
文章目录 方法1方法2方法3参考不同的安装方法,对应不同的删除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool...
软件测试基础知识
软件测试基本概念 1、软件程序文档,软件测试程序测试文档测试。 “程序”是指能够实现某种功能的指令的集合,“文档”是指软件在开发、使用和维护过程中产生的图文集合。; 2、软件的分类 按功能分:系统软件、应用软件 按技术架构分…...
使用 .toISOString() 方法生成当前时间的ISO格式字符串,解决UTC时区差问题
方法分析: 日常开发中,有时我们需要向后端传递的时间值可能并非一个时间对象,而是字符串格式。 例 1:[2023-08-16T08:07:25.577Z] 但是我们通过 new Date() 之后直接使用 .toString() 方法得到的却并非这种格式。 例 2࿱…...
“BMP转PNG一键转换,批量处理图片,迈入高效图片管理新时代“
你是否曾经为了转换图片格式而烦恼?是否曾经因为一张一张地手动转换而感到无奈?现在,我们的全新工具将为你解决这些问题,开启高效图片管理新时代! 首先,我们进入首助编辑高手主页面,会看到有多种…...
解决Vue编程式导航路由跳转不显示目标路径问题
我们配置一个编程式导航的路由跳转,跳转到 /search 页面,并且携带categoryName和categoryId两个query参数。 this.$router.push({path: "/search",query: {categoryName: dataset.categoryname,categoryId: dataset.categoryid} }) 如果我们…...
Android studio 引用framework.jar
framework.jar 引用目录 N/O: out/target/common/obj/JAVA_LIBRARY/framework_interminate/classes.jarAndroid 9/10: out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jarAndroid 11: out/soong/.intermediates/framewo…...
软著项目推荐 深度学习 python opencv 火焰检测识别 火灾检测
文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…...
宝塔面板安装搭建DiscuzQ论坛教程与小程序上架发布后的展示效果
DiscuzQ论坛小程序上架发布后的展示效果: 1、需要用到的环境: php7.2 mysql5.7或者MariaDB 10.2(我安装用的mysql8.0) php除了必要的一些扩展外,还需要启用readlink、symlink函数等,具体看官方说明,安装的时候也会提醒…...
交换机配置与管理
文档以国产迈普交换机为例,各厂家交换机配置有少许不同,仅供参考。 交换机命令行模式: 普通用户模式Hostname>() exit 输入enable命令 特权用户模式Hostname#() exit 输入configu…...
python每日一题——7接雨水
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…...
Ubuntu20安装ssh服务
Ubuntu20上执行如下命令查看是否存在ssh服务 #ps -e | grep ssh 只有ssh-agent,没有sshd; 因此要安装openssh-server. 搜索openssh-server,得到下载链接: openssh-server 复制这个Binary Package链接即可下载,然后使用如下命令安装 sudo…...
linux LVM /dev/sdb mount dir /data【linux LVM 磁盘挂载目录】
添加磁盘 /dev/sdb rootregistry01 ~]# fdisk -lDisk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk lab…...
由于找不到msvcp120.dll无法继续执行代码是什么原因怎么修复
今天我想和大家分享的是关于“msvcp120.dll丢失的解决方法”。或许有些同学在平时使用电脑的过程中会遇到这个问题,但是并不知道该如何解决。那么,接下来我将从三个方面为大家介绍:msvcp120.dll丢失的原因、msvcp120.dll是什么以及msvcp120.d…...
为你的项目加上微信登录(个人开发)
当我们开发个人项目的时候,为了用户登录的便捷性,经常会给我们的项目加上一些除了注册之外的方式,其中最常见的就是微信登录,但作为个人开发者,是无法使用微信的授权登录的,但是通过微信公众号可以获得同样…...
Pinia的使用技巧
一、安装 npm install pinia 二、main.ts引入 import { createApp } from vue import App from ./App.vue import { createPinia } from piniaconst app createApp(App) app.use(createPinia()) app.mount(#app)三、定义参数 import { defineStore } from piniatype User …...
『亚马逊云科技产品测评』活动征文|AWS 数据库产品类别及其适用场景详细说明
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 数据库产品类别 01、Amazon Aurora 02、Amazon Docum…...
S32K324 UDS Bootloader开发-下位机篇-Bootload软件(3)
文章目录 前言校验算法34服务响应的字节字节对齐问题跳转问题Boot Delay功能重要配置跳转标志FLASH DRIVER和APP区域CAN ID配置中断使能与禁止CAN TP配置总结前言 上一篇文章介绍了S32K324 UDS Bootlodaer开发中的UDS相关的更改,本文总结一下调试过程中出现的一些问题,及解决…...
如何在 Vim 中剪切、复制和粘贴
目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中,你将学习到剪切和复制粘贴的相关知识。 剪…...
算法基础一
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 解题思路:这道题最优的做法时间复杂度是O(n),顺序扫描数组,对每一个元素在…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
