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

《实现 HTML 图片轮播效果》

目录

(一)HTML 结构

(二)CSS 样式

(三)JavaScript 实现轮播逻辑


一、轮播效果的重要性与应用场景

在网页设计中,轮播效果是非常常见且重要的元素。它可以在有限的空间内展示多张图片或者广告,能够有效地吸引用户的注意力,提高信息展示的效率。常用于网站首页的焦点图展示、商品图片展示等场景。

二、HTML 轮播效果的实现分析

以下是一个简单的 HTML、CSS 和 JavaScript 实现的图片轮播代码示例。

(一)HTML 结构

<div class="container"><ul class="img_box"><li><img src="img/20210714013959_50691.jpg" alt=""></li><li><img src="img/20210218182831_891c5.jpg" alt=""></li><li><img src="img/20210201171230_53725.jpg" alt=""></li></ul>
</div>

在 HTML 部分,我们创建了一个包含图片列表的容器,这是轮播图的基本结构。

(二)CSS 样式

* {padding: 0;margin: 0;
}
img {width: 100px;
}
.container {width: 800px;height: 350px;background: red;margin: 100px auto;overflow: hidden;position: relative;
}
.container.btns {position: absolute;width: 90%;left: 5%;top: 150px;display: flex;justify-content: space - between;
}
.container.btns li {list - style: none;width: 50px;height: 50px;border - radius: 25px;text - align: center;line - height: 50px;background: rgba(0, 0, 0, 0.3);cursor: pointer;color: white;
}
.container.btns li:hover {background: rgba(0, 0, 0, 0.4);
}
.container.img_box {width: 4000px;height: 350px;background: pink;display: flex;position: absolute;left: - 800px;/* transition: left 1s linear; */
}
.container.img_box li {width: 800px;height: 350px;list - style: none;
}
.container.img_box li img {width: 100%;height: 100%;object - fit: contain;
}
.dotts {position: absolute;/* background: red; */width: 100%;bottom: 10px;display: flex;justify - content: center;
}
.dotts li {list - style: none;background: rgba(255, 255, 255, 0.4);margin: 5px;padding: 4px 6px;font - size: 12px;cursor: pointer;border: 2px dashed rgb(239, 19, 169);border - radius: 60px;
}
.dotts li.current {color: white;background: black;
}

CSS 样式主要用于定义轮播图的外观,包括容器的大小、图片的尺寸、切换按钮和指示点的样式等。通过设置overflow: hidden来隐藏超出容器范围的图片,从而实现轮播效果。

(三)JavaScript 实现轮播逻辑

window.onload = function () {// 获取轮播容器 containervar container = document.querySelector(".container");var img_box = document.querySelector(".container.img_box");img_box.style.left = "-800px";// 轮播核心代码var change = function (offset) {// 获取图片切换的目标位置var newoffset = parseInt(img_box.style.left) + offset;var speed = offset / 100;var move = function () {img_box.style.left = parseInt(img_box.style.left) + speed + "px";if (parseInt(img_box.style.left)!= newoffset) {setTimeout(move, 10);} else {if (parseInt(img_box.style.left) == -3200) {img_box.style.left = "-800px";} else if (parseInt(img_box.style.left) == 0) {img_box.style.left = "-2400px";}}};move();};// 生成左右切换的按钮var ul = document.createElement("ul");ul.className = "btns";var left_li = document.createElement("li");left_li.innerHTML = "<";var right_li = document.createElement("li");right_li.innerHTML = ">";ul.appendChild(left_li);ul.appendChild(right_li);container.appendChild(ul);// 绑定事件left_li.onclick = function () {change(800);index--;if (index < 0) {index = 2;}highlight();};right_li.onclick = function () {change(-800);index++;if (index > 2) {index = 0;}highlight();};// 自动轮播var timer = setInterval(right_li.onclick, 4000);// 解决冲突问题container.onmouseenter = function () {clearInterval(timer);};container.onmouseleave = function () {timer = setInterval(right_li.onclick, 4000);};// 生成任意切换的按钮var dott_ul = document.createElement("ul");dott_ul.className = "dotts";// 获取有几个图片var img_box_li = document.querySelectorAll(".img_box li");for (var i = 0; i < img_box_li.length; i++) {var li = document.createElement("li");li.innerHTML = i + 1;if (i == 0) {li.className = "current";}dott_ul.append(li);}container.append(dott_ul);// 任意切换var dott_ul_li = document.querySelectorAll(".dotts li");for (var i = 0; i < dott_ul_li.length; i++) {dott_ul_li[i].onclick = function () {// 图片切换var new_index = this.innerText - 1;change((index - new_index) * 800);// 效果切换index = new_index;highlight();};}// 定义一个游标 记录当前点点的索引值var index = 0;// 按钮样式切换代码var highlight = function () {for (var k = 0; k < dott_ul_li.length; k++) {if (k == index) {dott_ul_li[k].className = "current";} else {dott_ul_li[k].className = "";}}};// 初始化辅助无缝轮播的图片var last_li = img_box.firstElementChild.cloneNode(true);var first_li = img_box.lastElementChild.cloneNode(true);img_box.insertBefore(first_li, img_box.firstElementChild);img_box.appendChild(last_li);
};

JavaScript 代码实现了轮播的核心逻辑,包括左右按钮点击切换图片、自动轮播、鼠标移入移出暂停和恢复自动轮播、点击指示点切换图片以及样式切换等功能。其中,通过改变图片容器的left值来实现图片的切换,并且利用克隆第一张和最后一张图片实现无缝轮播的效果。

通过这个 HTML 图片轮播的例子,我们可以看到,结合 HTML、CSS 和 JavaScript 可以实现丰富的网页交互效果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • static和final有什么区别
  • 机器人--手眼标定算法
  • JAVA 使用POI实现单元格行合并生成
  • 秋招面经9.11
  • FAT32文件系统详细分析 (格式化SD nandSD卡)
  • Spring Boot中实现定时任务的主要方式
  • 详细分析Mysql配置文件路径的查找(多种方法)
  • IDA动态调试
  • 【电力系统】清除故障后电力系统的摆动曲线
  • 信号量(二值信号量和计数信号量)和互斥量
  • 【hot100-java】【搜索二维矩阵 II】
  • 装备综合保障研究进展整理
  • 15_分布式数据结构
  • Lua 与 C#交互
  • 通过域名无法访问不到网站,IP可正常访问(DNS污染)
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2019.2.20 c++ 知识梳理
  • 77. Combinations
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript-Array类型
  • Javascript弹出层-初探
  • Python爬虫--- 1.3 BS4库的解析器
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 第十八天-企业应用架构模式-基本模式
  • 回流、重绘及其优化
  • 老板让我十分钟上手nx-admin
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用API自动生成工具优化前端工作流
  • 问题之ssh中Host key verification failed的解决
  • 线上 python http server profile 实践
  • No resource identifier found for attribute,RxJava之zip操作符
  • Python 之网络式编程
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # 飞书APP集成平台-数字化落地
  • # 职场生活之道:善于团结
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)SvelteKit教程:hello world
  • (正则)提取页面里的img标签
  • (转)memcache、redis缓存
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)人的集合论——移山之道
  • (转)为C# Windows服务添加安装程序
  • .net framework4与其client profile版本的区别
  • .net 获取url的方法
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .NET中两种OCR方式对比