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

JavaScript轮播图

HTML部分

<div class="box" onmouseover="over()" onmouseout="noover()"><img src="./img/zuo.png" alt="" class="left_arrow" onclick="left_last()"><img src="./img/yy.png" alt="" class="right_arrow" onclick="right_word()"><div id="carousel"></div><div class="round"></div></div>

JavaScript部分:携带注释哟家人们

<script>let data; // 声明一个变量用于存储从服务器获取的数据let k = 0; // 当前显示的图片索引let imgwidth; // 图片宽度let imgheight; // 图片高度let inter; // 用于存储定时器的变量// 创建一个XMLHttpRequest对象用于发送请求let xhr = new XMLHttpRequest();// 设置请求方式和请求地址xhr.open('get', './js/banner.json', true);// 发送请求xhr.send();// 接收返回的响应数据xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {let text = xhr.responseText;// 将获取的文本数据转换为JSON格式data = JSON.parse(text);// 调用展示图片的函数console.log(data); // 打印获取到的数据到控制台// 调用展示图片的函数show(data);}};// 获取轮播图容器元素let carsoule = document.getElementById('carousel');function show(data) {let str = ``; // 声明一个空字符串用于存储要渲染的图片标签let sti = ``; // 声明一个空字符串用于存储轮播图指示器的标签for (let i = 0; i < data.imge.length; i++) {// 渲染图片到页面中str += `<img src="${data.imge[i]}" alt="" class="img_carousel">`;// 根据索引,渲染轮播图指示器if (i == 0) {sti += `<div style="background-color: aqua;"></div>`;} else {sti += `<div></div>`;}}// 将最后一张图片再次添加到轮播图容器中,用于实现循环播放str += `<img src="${data.imge[0]}" alt="">`;// 将图片和轮播图指示器渲染到页面中document.getElementById('carousel').innerHTML = str;document.getElementsByClassName('round')[0].innerHTML = sti;// 获取第一张图片的宽度imgwidth = document.getElementsByClassName('img_carousel')[0].offsetWidth;// 调用轮播功能noover();}// 获取轮播图指示器的所有子元素let dots = document.getElementsByClassName('round')[0].children;// 下一张图片函数function next() {k++; // 索引加1,显示下一张图片carsoule.style.marginLeft = "-" + imgwidth * k + "px"; // 设置轮播图容器的左边距carousel.style.transition = "margin-left 1s"; // 设置过渡效果// 如果达到最后一张图片,回到第一张图片if (k == data.imge.length) {setTimeout(function() {carousel.style.transition = "none"; // 去掉过渡效果k = 0; // 将索引设置为0,回到第一张图片carousel.style.marginLeft = `-${k * 100}%`; // 设置轮播图容器的左边距}, 1000);}// 根据索引,设置轮播图指示器的样式if (k < dots.length) {dots[k].style.background = "aqua"; // 当前图片指示器背景颜色为aquadots[k - 1].style.background = "pink"; // 上一张图片指示器背景颜色为pink} else if (k == dots.length) {dots[0].style.background = "aqua"; // 第一张图片指示器背景颜色为aquadots[k - 1].style.background = "pink"; // 最后一张图片指示器背景颜色为pinkk = 0; // 将索引设置为0,回到第一张图片}}// 自动轮播函数function noover() {inter = setInterval(next, 2000); // 每2秒调用一次next函数,实现自动轮播}// 鼠标悬停在轮播图上,停止自动轮播function over() {clearInterval(inter); // 清除定时器,停止自动轮播}// 获取右箭头元素let right = document.getElementsByClassName('right_arrow')[0];// 点击右箭头切换到下一张图片function right_word() {right.onclick = null; // 防止连续点击next(); // 调用下一张图片函数// 1.5秒后恢复右箭头的点击事件setTimeout(function() {right.onclick = right_word;}, 1500);}// 获取左箭头元素// let left = document.getElementsByClassName('left_arrow')[0];// 点击左箭头切换到上一张图片function left_last() {k--; // 索引减1,显示上一张图片// 如果索引小于0,回到最后一张图片if (k < 0) {k = dots.length; // 将索引设置为指示器数量,显示最后一张图片carousel.style.transition = ""; // 去掉过渡效果carsoule.style.marginLeft = "-" + imgwidth * k + "px"; // 设置轮播图容器的左边距// 0.01秒后,过渡效果生效,显示倒数第二张图片setTimeout(function() {k--; // 索引减1,显示倒数第二张图片carousel.style.transition = "all 1s"; // 添加过渡效果carsoule.style.marginLeft = "-" + imgwidth * k + "px"; // 设置轮播图容器的左边距dots[k].style.background = "aqua"; // 当前图片指示器背景颜色为aquadots[0].style.background = "pink"; // 第一张图片指示器背景颜色为pink}, 10);} else {carousel.style.transition = "all 1s"; // 添加过渡效果carsoule.style.marginLeft = "-" + imgwidth * k + "px"; // 设置轮播图容器的左边距dots[k].style.background = "aqua"; // 当前图片指示器背景颜色为aquadots[k + 1].style.background = "pink"; // 下一张图片指示器背景颜色为pink}}</script>

http://www.lryc.cn/news/406697.html

相关文章:

  • 修复SteamUI.dll加载失败的指南,快速修复failed to load steamui.dll
  • PCL Local Surface Patches 关键点提取
  • Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问
  • Android 线程池的面试题 线程线程池面试题
  • Flink时间和窗口
  • LLaMA模型量化方法优化:提高性能与减小模型大小
  • 前端CSS实现卡片抽奖效果
  • Java在for循环中修改集合
  • Java小白入门到实战应用教程-运算符详解
  • secureCRT同时在所有已打开窗口执行命令、mac-os下使用的SecureCRT版本 以及 SecureCRT一段时间不操作没有响应的问题
  • 增材制造与智能制造关系
  • Google Test 学习笔记(简称GTest)
  • 不可变集合
  • 景区AR导航营销系统:技术解决方案与实施效益分析
  • MATLAB的基础知识
  • Redis-高级实战案例
  • d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法
  • Linux下如何设置系统定时任务
  • 【React】JSX 实现列表渲染
  • 写一个简单的兼容GET/POST请求的登录接口
  • 【好玩的经典游戏】Docker环境下部署赛车小游戏
  • 物理机 gogs+jenkins+sonarqube 实现CI/CD
  • 前端表格解析方法
  • Leetcode 3227. Vowels Game in a String
  • 树莓派4B从装系统raspbian到vscode远程编程(python)
  • vue上传Excel文件并直接点击文件列表进行预览
  • OpenCV 像素操作—证件照换底色详细原理 C++纯手写实现
  • tinygrad框架简介;MLX框架简介
  • 服务器重启了之后就卡在某个页面了,花屏,如何解决??
  • Hospital 14.6.0全开源医院管理预约系统源码