当前位置: 首页 > news >正文

JavaScript 实现轮播图功能

自动轮播:图片按照设定的时间间隔自动切换,实现循环播放。
箭头控制:用户可以通过点击左右箭头手动切换图片,控制轮播的方向。
小圆点指示:在轮播图下方显示小圆点,指示当前显示的图片位置
鼠标交互:当鼠标悬停在轮播图上时,自动轮播暂停;鼠标移开后,自动轮播恢复。
HTML 结构:

<div class="banner_box" onmouseover="hover()" onmouseout="hoverout()">
<div class="banner_arrows">
<img src="./img/箭头左.png" class="left" alt="" onclick="left()"/>
<img src="./img/箭头右.png" class="right" alt="" onclick="right()"/>
</div>
<div class="banner_img">
</div>
<div class="banner_dot">
</div>
</div>


<script src="js/banner.js"></script>
AI写代码
html

这段 HTML 代码构建了轮播图的基本结构。banner_box是轮播图的容器,banner_arrows包含左右箭头图片,banner_img用于展示轮播的图片,banner_dot则是放置小圆点的区域。同时,通过onmouseover和onmouseout事件绑定了鼠标悬停和移开的函数。

css样式:
*{
margin: 0;
padding: 0;
}
.banner_box{
position: relative;
width: 48%;
margin-left: 20%;
margin-top: 5%;
background-color: aqua;
overflow: hidden;
}
.banner_arrows {
width: 100%;
height: 300px;
position: absolute;
z-index: 5;
display: flex;
justify-content: space-between;
align-items: center
}

.banner_arrows img {
width: 8%;
height: 15%;
cursor: pointer;
/* 当鼠标悬停在图片上时,显示小手 */
}
.banner_img{
width: 100%;
height: 300px;
display: flex;
}
.banner_img img{
width: 100%;
height: 300px;
float: left;
}
.banner_dot{
position: absolute;
/* background-color: brown; */
width: 25%;
height: 50px;
bottom: 0px;
left: 40%;
}
span{
background-color: pink;
float: left;
display: block;
width: 30px;
height: 30px;
margin-left: 5px;
border-radius: 50%;

}
AI写代码
css

CSS 样式主要用于设置轮播图的布局和外观。banner_box设置为相对定位,并设置了宽度、边距和背景颜色,同时overflow: hidden确保超出容器的图片部分不会显示。banner_arrows是绝对定位,位于轮播图上方,包含左右箭头图片,并设置了箭头的样式和鼠标悬停效果。banner_img使用display: flex来排列图片,banner_dot用于放置小圆点,设置了小圆点的样式和位置。

js逻辑:
let body = document.getElementsByClassName('banner_img')[0];
let round = document.getElementsByClassName('banner_dot')[0];
let bot = document.getElementsByTagName('span');
// 定时器
let inter;
// 数据
let data;
// 下标
let index = 0;
// 生成一个 XMLHttpRequest 对象
let xhr = new XMLHttpRequest();
// open(请求类型是get,请求地址:文件位置写的是json文件,请求方式是true。表示是异步
xhr.open('get', 'js/banner.json', true);
// 接着发送请求
xhr.send();
// 该方法可以定义响应执行函数,当 readyState 属性发
// 生变化时会自动调用该方法。
xhr.onreadystatechange = function() {
// ready是交互流程。5个阶段,if判断中意思是
// 交互流程是否达到第五个阶段并且状态等于200请求成功
if (xhr.readyState == 4 && xhr.status == 200) {
// 响应文本(返回的数据)
let text = xhr.responseText;
// 把返回的json数据转换,并赋值到data变量
data = JSON.parse(text);
console.log(data);
index = 0;
reader();
bot[index].style.backgroundColor = 'red';
inter = setInterval(auto, 2000);
}
};

// 渲染函数
function reader() {
let str = '';
for (let i = 0; i < data.length; i++) {
str += `
<img src="${data[i]}" alt="" />`;
}
str += `
<img src="${data[0]}" alt="" />`;
console.log(str);
let strs = '';
for (let i = 0; i < data.length; i++) {
strs += `<span></span>`;
}

round.innerHTML = strs;
body.innerHTML = str;
}
// 自动轮播
function auto() {
index++;
body.style.transition = "all 1s";
body.style.marginLeft = -index * 100 + "%";
// console.log(index);

// bot[ bot.length-1].style.backgroundColor = 'pink'
console.log(index, data.length);
if (index >= data.length) {

index = 0;
setTimeout(function() {
body.style.marginLeft = -index * 100 + "%";
body.style.transition = "none";
}, 1000)
bot[0].style.backgroundColor = 'red';
bot[bot.length - 1].style.backgroundColor = 'pink';
} else {
bot[index].style.backgroundColor = 'red';
bot[index - 1].style.backgroundColor = 'pink';
}
}
// 鼠标放置到轮播图上时
// 清除定时器
function hover() {
clearInterval(inter);
}

// 鼠标移开时
// 重新设置定时器
function hoverout() {
inter = setInterval(auto, 2000);
}

// 右箭头
function right() {
auto();
document.getElementsByClassName('right')[0].onclick = null;
setTimeout(function() {
document.getElementsByClassName('right')[0].onclick = right;
}, 1000);
}

// 左箭头
function left() {
document.getElementsByClassName('left')[0].onclick = null;
// 首先判断图片下标是否为0
if (index == 0) {
// 如果为0那就让下标等于图片的长度(最后一张)
index = data.length;
// 并将图片切换到最后一张,过渡为none
body.style.transition = "none";
body.style.marginLeft = -(data.length) * 100 + "%";
}
// 然后设一个一次性的定时器,时间短一些
setTimeout(function() {
// 下标--;
index--;
body.style.transition = "all 1s";
body.style.marginLeft = -index * 100 + "%";
// console.log(index);
bot[0].style.backgroundColor = 'pink'
console.log(index, data.length);
if (index == data.length - 1) {
bot[index].style.backgroundColor = 'red';
bot[0].style.backgroundColor = 'pink';
} else {
bot[index].style.backgroundColor = 'red';
bot[index + 1].style.backgroundColor = 'pink';
}
}, 10);
setTimeout(function() {
document.getElementsByClassName('left')[0].onclick = left;
}, 1000);
}
AI写代码
javascript
运行

代码解释
数据:从js/banner.json文件中获取图片数据,并将其解析为 JavaScript 对象。获取数据成功后,调用reader函数渲染轮播图,并设置初始的小圆点样式和启动自动轮播定时器。
渲染函数reader:遍历图片数据,生成包含图片img标签的字符串,并在最后添加一张与第一张相同的图片,用于实现无缝循环。同时,生成小圆点的span标签字符串,并将它们分别插入到banner_img和banner_dot中。
自动轮播函数auto:每次调用时,index自增,通过改变body的marginLeft属性来移动图片,实现图片的切换。当index达到图片数量时,重置index为 0,过渡效果也清除,并使用setTimeout设置一个过渡效果,实现无缝循环。同时,更新小圆点的背景颜色,指示当前显示的图片。
鼠标移动函数hover和hoverout:hover函数在鼠标悬停时清除自动轮播定时器,暂停自动轮播;hoverout函数在鼠标移开时重新启动自动轮播定时器,恢复自动轮播。
箭头控制函数right和left:right函数调用auto函数实现向右切换图片,并在切换后暂停箭头的点击事件,1 秒后恢复。(为了防止用户短时间内多次点击)left函数在点击左箭头时,先判断index是否为 0,若为 0 则将index设置为图片数量,切换到最后一张图片,然后通过setTimeout逐步切换到前一张图片,并更新小圆点的背景颜色。同样,在切换后暂停箭头的点击事件,1 秒后恢复。
通过以上代码,我们就能实现一个日常且实用好看的轮播图效果了。
————————————————
版权声明:本文为CSDN博主「好青崧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jht_520/article/details/147201002

http://www.jsqmd.com/news/1388106/

相关文章:

  • 深夜情绪崩溃时我试了四个免费树洞只有暖音瑶池接住了我 - nuanyin
  • Windows系统配置错误提权:从PowerShell绕过到服务权限漏洞实战
  • 【LeetCode】16.最接近的三数之和
  • 【LangChain】从 Vibe Coding 到 LangChain 与 LangGraph 核心深度解析
  • Sunshine游戏串流服务器:从技术选型到实战部署的完整指南
  • 绷住
  • Windows 开启虚拟化 + WSL2 完整安装指南(Docker 前置条件)
  • 三年开发者内功修炼:从API调用到系统思维与深度调试
  • 从零基础到行业标杆,揭秘哈尔滨微网站建设的高质量落地全流程解析与避坑指南
  • Android 7系统无障碍服务(二)AccessibilityManagerService 启动与初始化
  • 深度解析七冶建设集团网站江苏:一站式服务入口与企业形象展示窗口
  • 在本地部署一套几乎免费的大模型环境3:让本地IDE(vscode)连上本地大模型环境
  • RIGOL DG922 Pro射频信号发生器深度评测与应用指南
  • 2026长春单招班推荐:考生与家长必备的升学集训选择指南 - 爱说大实话121
  • Context Hub:解决AI Agent调用过时API的实时上下文验证工具
  • 东莞本土人力系统服务商有哪些?东莞企业HR系统最新选型指南!
  • 深度解析枣阳建设局网站如何助力城市更新与民生改善的实用指南
  • 模运算:从时钟算术到RSA加密,程序员必须掌握的数学工具
  • 分布式文件系统架构设计与性能优化实践
  • 保定适合车灯升级性价比高的厂家推荐 保定车灯 保定改透镜推荐 - 保定大拇指车灯
  • 五河网站建设哪家好?避开这些坑,手把手教你选出最靠谱的设计团队
  • 9416张超声肾脏结石二分类数据集|正负样本倾斜适配、轻量模型高效训练、助力基层超声结石初筛与边缘设备落地
  • 毕设项目 深度学习车道线检测(源码+论文)
  • 多元情感心结专属测评 瑶池树洞极致包容领跑全圈层陪伴 - nuanyin
  • (5/6)我一个人+AI,做了款叫「猜猜看呗」的全栈小程序——看完你可能也想做一个(管理篇)
  • WiFi模块在现代打印技术中的关键作用与优化实践
  • ComfyUI-Manager终极指南:高效解决节点管理难题的专业解决方案
  • 2026年深圳大件特殊物品搬运价格参考与靠谱服务商推荐(完整版):含钢琴/红木家具/保险柜/鱼缸收费标准及各区搬家公司实测对比 - 禧燕搬家
  • 哪个商城网站建设好,资深从业者深度解析避坑指南与实战经验
  • 2026深圳钢琴搬运价格参考+靠谱公司挑选标准(全区域通用)【最新版】 - 禧燕搬家