H5+CSS+JS制作好看的轮播图
先来看效果

点击下方按钮可以做到平滑切换轮播,轮播图片可以根据自定义随心变化。
先来看一下页面代码结构
<div class="container"><div class="lunbo-wrap"><div id="slide"></div><div class="buttons"><div class="s_button"><</div><div class="s_button">></div></div></div>
</div>
在这段代码中,#slide的地方用于存放轮播图片和图片上的文字介绍,可以直接写成纯静态的卡片,也可以使用JS动态读取数据,动态生成卡片,完整的轮播结构应该如下(纯静态卡片可以按照下面的代码直接用),对于按钮来说,可以自己选择喜欢的按钮放在这里就行,调整切换按钮位置从CSS处调整即可
<div class="container"><div class="lunbo-wrap"><div id="slide"><div class="item" style="background-image: url("img/photo1.jpg");"><div class="content"><div class="name">图片1</div><div class="des">这是一串文字介绍</div></div></div><div class="item" style="background-image: url("img/photo2.jpg");"><div class="content"><div class="name">图片2</div><div class="des">这是一串文字介绍</div></div></div><div class="item" style="background-image: url("img/photo3.jpg");"><div class="content"><div class="name">图片3</div><div class="des">这是一串文字介绍</div></div></div><div class="item" style="background-image: url("img/photo4.jpg");"><div class="content"><div class="name">图片4</div><div class="des">这是一串文字介绍</div></div></div><div class="item" style="background-image: url("img/photo5.jpg");"><div class="content"><div class="name">图片5</div><div class="des">这是一串文字介绍</div></div></div><div class="item" style="background-image: url("img/photo6.jpg");"><div class="content"><div class="name">图片6</div><div class="des">这是一串文字介绍</div></div></div></div><div class="buttons"><div class="s_button"><</div><div class="s_button">></div></div></div>
</div>
如果需要动态的添加卡片,则可以使用如下的JS,这里记得导入JQuery的文件
$(document).ready(function() {$.getJSON('js/lunboJsonUp.json', function(data) {console.log("data:", data)const $slide = $('#slide');// 渲染轮播图data.forEach(item => {const $item = $('<div class="item"></div>').css('background-image', `url(${item.image})`).append($('<div class="content"></div>').append($('<div class="name"></div>').text(item.photoName),$('<div class="des"></div>').text(item.text),));$slide.append($item);});});//下一张:将所有带有 .item 类的第一个元素移动到 #slide 容器的末尾。document.querySelectorAll('.s_button')[1].onclick = () => {let lists = document.querySelectorAll('.item');document.querySelector('#slide').appendChild(lists[0]);}//上一张:将所有带有 .item 类的最后一个元素移动到 #slide 容器的开头document.querySelectorAll('.s_button')[0].onclick = () => {let lists = document.querySelectorAll('.item');document.querySelector('#slide').prepend(lists[lists.length - 1]);}
})
上述代码实现动态卡片生成,去主要部分还是在于点击按钮实现轮播的切换,我们来看上一张的操作:
document.querySelectorAll('.s_button')[0].onclick = () => {let lists = document.querySelectorAll('.item');document.querySelector('#slide').prepend(lists[lists.length - 1]);
}
document.querySelectorAll('.s_button')[0]:选取所有带有.s_button类的元素,并获取其中第一个元素(索引为0)。这通常对应于“上一张”按钮。
.onclick = () => { ... }:同样地,为该按钮添加一个点击事件监听器。
let lists = document.querySelectorAll('.item'):与“下一张”功能相同,选择所有带有.item类的元素,并将它们存储在变量lists中。
document.querySelector('#slide').prepend(lists[lists.length - 1]):找到ID为#slide的容器,并将最后一个.item元素(即lists[lists.length - 1])移动到该容器的开头。这样就实现了当前显示的最后一个项目被移到最前,从而展示前一个项目。
下一张同理:
document.querySelectorAll('.s_button')[1].onclick = () => {let lists = document.querySelectorAll('.item');document.querySelector('#slide').appendChild(lists[0]);
}
document.querySelectorAll('.s_button')[1]:选取所有带有.s_button类的元素,并获取其中第二个元素(索引为1)。这通常对应于“下一张”按钮。
.onclick = () => { ... }:为该按钮添加一个点击事件监听器,当用户点击这个按钮时,执行箭头函数中的代码块。
let lists = document.querySelectorAll('.item'):选择所有带有.item类的元素,并将它们存储在变量lists中。这些元素代表轮播图中的各个项目。
document.querySelector('#slide').appendChild(lists[0]):找到ID为#slide的容器,并将第一个.item元素(即lists[0])移动到该容器的末尾。这样就实现了当前显示的第一个项目被移到最后,从而展示下一个项目。
对于这样效果的轮播,主要还是在于轮播图样式的定义,下面是CSS完整代码
/* 重置所有元素的默认 margin 和 padding */
* {margin: 0;padding: 0;
}/* 轮播图容器样式 */
.lunbo-wrap {width: 1200px; /* 设置轮播图容器的宽度为1200px */height: 500px; /* 设置轮播图容器的高度为500px */position: absolute; /* 使用绝对定位 */top: 42%; /* 将顶部边缘设置为视口高度的42% */left: 50%; /* 将左侧边缘设置为视口宽度的50% */transform: translate(-50%, -50%); /* 使用平移变换使容器居中 */background-color: #f5f5f5; /* 设置背景颜色为浅灰色 */padding: 50px; /* 设置内边距为50px */box-shadow: 0 30px 50px #dbdbdb; /* 添加阴影效果 */
}/* 轮播图滑块样式 */
#slide {width: max-content; /* 设置滑块的宽度为最大内容宽度 */
}/* 每个轮播项的通用样式 */
.item {width: 200px; /* 设置每个轮播项的宽度为200px */height: 300px; /* 设置每个轮播项的高度为300px */background-position: 50%, 50%; /* 设置背景图片的位置 */display: inline-block; /* 使每个轮播项显示为行内块级元素 */background-size: cover; /* 使背景图片覆盖整个轮播项 */position: absolute; /* 使用绝对定位 */top: 60%; /* 设置顶部距离为60% */transform: translateY(-50%); /* 使用平移变换使轮播项垂直居中 */border-radius: 20px; /* 设置圆角半径 */box-shadow: 0 30px 50px #505050; /* 添加阴影效果 */transition: 0.5s; /* 设置过渡效果持续时间为0.5秒 */
}/* 第一个和第二个轮播项的特殊样式 */
.item:nth-child(1),
.item:nth-child(2) {top: 0; /* 设置顶部距离为0 */left: 0; /* 设置左侧距离为0 */width: 100%; /* 设置宽度为100% */height: 100%; /* 设置高度为100% */transform: translateY(0); /* 取消垂直居中 */border-radius: 0; /* 取消圆角 */box-shadow: none; /* 取消阴影 */
}/* 第三个轮播项的特殊位置 */
.item:nth-child(3) {left: 65%; /* 设置左侧距离为65% */
}/* 第四个轮播项的特殊位置 */
.item:nth-child(4) {left: calc(65% + 220px); /* 计算左侧距离 */
}/* 第五个轮播项的特殊位置 */
.item:nth-child(5) {left: calc(65% + 440px); /* 计算左侧距离 */
}/* 第六个轮播项的特殊位置 */
.item:nth-child(6) {left: calc(65% + 660px); /* 计算左侧距离 */opacity: 0; /* 设置透明度为0 */
}/* 轮播项中的内容样式 */
.item .content {width: 300px; /* 设置内容宽度 */position: absolute; /* 使用绝对定位 */left: 100px; /* 设置左侧距离 */top: 50%; /* 设置顶部距离 */transform: translateY(-50%); /* 使用平移变换使内容垂直居中 */font-family: system-ui; /* 设置字体 */color: black; /* 设置字体颜色 */display: none; /* 默认隐藏内容 */
}/* 第二个轮播项的内容默认显示 */
.item:nth-child(2) .content {display: block; /* 显示内容 */
}/* 轮播项中的名称样式 */
.item .name {font-size: 40px; /* 设置字体大小 */font-weight: bold; /* 设置字体加粗 */opacity: 0; /* 初始透明度为0 */animation: showcontent 1s ease-in-out 1 forwards; /* 定义动画效果 */
}/* 轮播项中的描述样式 */
.item .des {margin: 20px 0; /* 设置上下外边距 */opacity: 0; /* 初始透明度为0 */animation: showcontent 1s ease-in-out 0.3s 1 forwards; /* 延迟0.3秒后显示 */
}/* 轮播项中的按钮样式 */
.item button {padding: 10px 20px; /* 设置内边距 */border: none; /* 取消边框 */opacity: 0; /* 初始透明度为0 */animation: showcontent 1s ease-in-out 0.6s 1 forwards; /* 延迟0.6秒后显示 */
}/* 定义动画效果,这里主要是对于图片上文字部分的动画 */
@keyframes showcontent {from {opacity: 0; /* 初始透明度为0 */transform: translateY(100px); /* 向下移动100px */filter: blur(20px); /* 初始模糊效果 */}to {opacity: 1; /* 最终透明度为1 */transform: translateY(0); /* 不再移动 */filter: blur(0); /* 取消模糊效果 */}
}/* 控制按钮容器样式 */
.buttons {width: 100%; /* 设置宽度为100% */position: absolute; /* 使用绝对定位 */bottom: 50px; /* 设置底部距离 */margin-left: -50px; /* 设置左侧外边距 */text-align: center; /* 文本居中 */border: none; /* 取消边框 */
}/* 单个控制按钮样式 */
.s_button {display: inline-block; /* 行内块级元素 */border: none; /* 取消边框 */width: 50px; /* 设置宽度 */height: 50px; /* 设置高度 */line-height: 50px; /* 设置行高 */text-align: center; /* 文本居中 */color: gray; /* 设置字体颜色 */font-size: 25px; /* 设置字体大小 */border-radius: 50%; /* 设置圆形 */font-weight: bold; /* 设置字体加粗 */border: 1px solid #555; /* 设置边框 */margin: 0 25px; /* 设置外边距 */transition: 0.5s; /* 设置过渡效果 */
}/* 鼠标悬停时的控制按钮样式 */
.s_button:hover {cursor: pointer; /* 更改鼠标指针 */background-color: #ccc; /* 设置背景颜色 */
}
这里附上json文件,有需要的可以参考这个json来定义数据格式
[{"image": "img/photo1.jpg","photoName": "图片1","text": "这是一串文字介绍"},{"image": "img/photo2.jpg","photoName": "图片2","text": "这是一串文字介绍"},{"image": "img/photo3.jpg","photoName": "图片3","text": "这是一串文字介绍"},{"image": "img/photo4.jpg","photoName": "图片4","text": "这是一串文字介绍"},{"image": "img/photo5.jpg","photoName": "图片5","text": "这是一串文字介绍"},{"image": "img/photo6.jpg","photoName": "图片6","text": "这是一串文字介绍"}
]
相关文章:
H5+CSS+JS制作好看的轮播图
先来看效果 点击下方按钮可以做到平滑切换轮播,轮播图片可以根据自定义随心变化。 先来看一下页面代码结构 <div class"container"><div class"lunbo-wrap"><div id"slide"></div><div class"butto…...
aio-pika 快速上手(Python 异步 RabbitMQ 客户端)
目录 简介官方文档如何使用 简介 aio-pika 是一个 Python 异步 RabbitMQ 客户端。5.0.0 以前 aio-pika 基于 pika 进行封装,5.0.0 及以后使用 aiormq 进行封装。 https://github.com/mosquito/aio-pikahttps://pypi.org/project/aio-pika/ pip install aio-pika官…...
表单与交互:HTML表单标签全面解析
目录 前言 一.HTML表单的基本结构 基本结构 示例 二.常用表单控件 文本输入框 选择控件 文件上传 按钮 综合案例 三.标签的作用 四.注意事项 前言 HTML(超文本标记语言)是构建网页的基础,其中表单(<form>&…...
非递减子序列(力扣491)
这道题的难点依旧是去重,但是与之前做过的子集类问题的区别就是,这里是求子序列,意味着我们不能先给数组中的元素排序。因为子序列中的元素的相对位置跟原数组中的相对位置是一样的,如果我们改变数组中元素的顺序,子序…...
Python基础-元组tuple的学习
在 Python 中,元组(tuple)是一种不可变的序列类型,允许存储不同类型的元素。元组非常类似于列表(list),但与列表不同的是,元组一旦创建,就不能修改其内容。 1 元组的创建…...
Vue与Konva:解锁Canvas绘图的无限可能
前言 在现代Web开发中,动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js,作为一款轻量级且高效的前端框架,凭借其响应式数据绑定和组件化开发模式,赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js,两者结…...
如何修改DNS解析?
DNS(域名系统)就像互联网的“电话簿”,负责将我们输入的网址转换为计算机能够理解的IP地址。如果DNS解析出现问题,访问网站就会受到影响。那我们该如何修改DNS解析呢?接下来,我们就来介绍一下这个话题。 为什么要修改DNS解析? 使用默认的…...
go语言文件和目录
打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件。 package mainimport ("fmt""os" )func main() {// 只读方式打开当前目录下的 main.go 文件file, err : os.Open(".…...
Solidity09 Solidity构造函数和修饰器
文章目录 一、构造函数二、修饰器三、OpenZeppelin的Ownable标准实现四、Remix 演示示例五、代码示例 这一讲,我们将用合约权限控制( Ownable)的例子介绍 Solidity语言中构造函数( constructor)和独有的修饰器&…...
ES6 Map 数据结构是用总结
1. Map 基本概念 Map 是 ES6 提供的新的数据结构,它类似于对象,但是"键"的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也可以跟踪键值对的原始插入顺序。 1.1 基本用法 // 创建一个空Map…...
使用wpa_supplicant和wpa_cli 扫描wifi热点及配网
一:简要说明 交叉编译wpa_supplicant工具后会有wpa_supplicant和wpa_cli两个程序生产,如果知道需要连接的wifi热点及密码的话不需要遍历及查询所有wifi热点的名字及信号强度等信息的话,使用wpa_supplicant即可,否则还需要使用wpa_…...
json转excel,在excel内导入json, json-to-excel插件
简介 JSON 转 Excel 是一款 Microsoft Excel 插件,可将 JSON 数据转换为 Excel 表格。 要求 此插件适用于以下环境:Excel 2013 Service Pack 1 或更高版本、Excel 2016 for Mac、Excel 2016 或更高版本、Excel Online。 快速开始 本快速开始指南适用…...
大模型应用与实战:专栏概要与内容目录
文章目录 大模型应用与实战📚 核心内容模块一、大模型推理与部署1.1 推理框架应用实践1.2 框架源码深度解析1.3 高并发部署优化1.4 国产化平台适配 二、Agent框架专题2.1 Langchain系列2.2 Qwen-Agent系列2.3 Dify应用实践2.4 框架对比与迁移 三、微调技术研究3.1 微…...
ZooKeeper 的典型应用场景:从概念到实践
引言 在分布式系统的生态中,ZooKeeper 作为一个协调服务框架,扮演着至关重要的角色。它的设计目的是提供一个简单高效的解决方案来处理分布式系统中常见的协调问题。本文将详细探讨 ZooKeeper 的典型应用场景,包括但不限于配置管理、命名服务…...
Arbess基础教程-创建流水线
Arbess(谐音阿尔卑斯) 是一款开源免费的 CI/CD 工具,本文将介绍如何使用 Arbess 配置你的第一条流水线,以快速入门上手。 1. 创建流水线 根据不同需求来创建不同的流水线。 1.1 配置基本信息 配置流水线的基本信息,如分组,环境&…...
科普书《从一到无穷大》的科普知识推翻百年集论
科普书《从一到无穷大》的科普知识推翻百年集论 黄小宁 “我们给两组无穷大数列中的各个数一一配对,如果最后这两组都一个不剩,这两组无穷大就是相等的;如果有一组还有些数没有配出去,这一组就比另一组大些,或者说强些…...
【键盘识别】实例分割
第一步 键盘检测 方案一 canny边缘检测 canny边缘检测检测结果不稳定,容易因为复杂背景或光线变换检测出其他目标。 如图是用canny边缘检测方法标出的检测出的边缘的四个红点。 参考的是这篇文章OpenCV实战之三 | 基于OpenCV实现图像校正_opencv 图像校正-CSDN博客 方案二…...
25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆
雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂,其末端执行器的位置可以表示为: 其中: L1 和 L2 是机器人臂的长度。θ1 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...
apisix的real-ip插件使用说明
k8s集群入口一般都需要过负载均衡,然后再到apisix。 这时候如果后台业务需要获取客户端ip,可能拿到的是lb或者网关的内网ip。 这里一般要获取真实ip需要做几个处理。 1. 负载均衡上,一般支持配置获取真实ip参数,需要配置上。然…...
位图的深入解析:从数据结构到图像处理与C++实现
在学习优选算法课程的时候,博主学习位运算了解到位运算的这个概念,之前没有接触过,就查找了相关的资料,丰富一下自身,当作课外知识来了解一下。 位图(Bitmap)是一种用于表示图像的数据结构&…...
Python实现GO鹅优化算法优化支持向量机SVM分类模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着信息技术的迅猛发展,数据量呈爆炸式增长,如何从海量的数据中提取有价值…...
Deno vs Node.js:性能对比深度解析
1. 引言 Deno 和 Node.js 都是基于 V8 引擎的 JavaScript 运行时环境,然而它们在架构、模块管理、安全性和性能方面存在显著差异。Deno 由 Node.js 的原始作者 Ryan Dahl 开发,旨在解决 Node.js 设计上的一些问题,比如包管理、安全模型和 Ty…...
我用AI做数据分析之数据清洗
我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样? 这里描述自己在使用AI进行数据分析(数据清洗)过程中的几个小故事: 1. 变量名的翻译 有一个项目是某医生自己收集的数据,变量名使用的是中文,分…...
备战蓝桥杯:双指针(滑动窗口)算法之逛花展
P1638 逛画展 - 洛谷 | 计算机科学教育新生态 这道题我们只要用一个kind和一个mp[N]的数组就能解决了 我们的解法1就是暴力枚举,先固定2,从2开始找连续的满足所有种类的最短的子数组,然后固定5,3,1,3&…...
【sqlite】python操作sqlite3(含测试)
个人小项目或者小团队,sqllite很适用,数据库封装操作如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-08 13:57 # Author : duxiaowei # File : connect_sqllite.py # Software: PyCharm """ sqllite操作, …...
mybatis 是否支持延迟加载?延迟加载的原理是什么?
1. MyBatis 是否支持延迟加载? 是的,MyBatis 支持延迟加载。延迟加载的主要功能是推迟数据加载的时机,直到真正需要时再去加载。这种方式能提高性能,尤其是在处理关系型数据时,可以避免不必要的数据库查询。 具体来说…...
collabora online+nextcloud+mariadb在线文档协助
1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...
深度学习中的Checkpoint是什么?
诸神缄默不语-个人CSDN博文目录 文章目录 引言1. 什么是Checkpoint?2. 为什么需要Checkpoint?3. 如何使用Checkpoint?3.1 TensorFlow 中的 Checkpoint3.2 PyTorch 中的 Checkpoint3.3 transformers中的Checkpoint 4. 在 NLP 任务中的应用5. 总…...
字符串高频算法:无重复字符的最长子串
题目 3. 无重复字符的最长子串 - 力扣(LeetCode) 解题思路 思路 方法: 滑动窗口 [!简单思路] [^1]以示例一中的字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,其中最长的那个字符串即为答…...
用深度学习模型构建海洋动物图像分类保姆教程
使用深度学习模型构建深度学习海洋动物图像分类模型的完整步骤如下,分为关键阶段和详细操作说明: 1. 数据准备与预处理 1.1 数据集组织 按类别分文件夹存储图像,例如:dataset/train/class1/class2/...val/class1/class2/...test…...
