《实现 HTML 图片轮播效果》

server/2024/9/24 2:38:53/
htmledit_views">

目录

(一)HTML 结构

(二)CSS 样式

(三)JavaScript 实现轮播逻辑


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

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

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

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

(一)HTML 结构

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 可以实现丰富的网页交互效果。


http://www.ppmy.cn/server/115558.html

相关文章

Pytorch2.4.0自动安装cudnn9.1??? pip安装cudnn方法

Pytorch2.4.0使用官方安装方式安装的时候&#xff0c;会自动给我安装cudnn9.1&#xff0c;不论是conda安装还是pip安装&#xff0c;害得我出了一大堆问题&#xff0c;气死我了 我倒退到安装pytorch2.3.0才没出现自动安装cudnn的问题 以及&#xff0c;记录一个pip安装cudnn的方…

DisplayManagerService启动及主屏添加-Android13

// 以下代码是模拟DisplayManagerService在Android 13中启动并添加主屏的过程。 // 注意&#xff1a;这只是一个简化的代码示例&#xff0c;实际的系统服务可能包含复杂的逻辑和错误处理。 import android.hardware.display.DisplayManagerGlobal; import android.view.Displ…

bpftrace使用

bpftrace是一种基于eBPF&#xff08;Extended Berkeley Packet Filter&#xff09;的跟踪工具&#xff0c;用于在Linux系统中进行动态跟踪和系统性能分析。理解bpftrace的概念、原理和使用方法有助于更好地使用和应用它。 介绍 eBPF&#xff08;Extended Berkeley Packet Filt…

在职研生活学习--20240908

文章目录 九月八日清晨&#xff0c;我们在鸟鸣声中醒来&#xff0c;精神饱满地迎接大汇演的挑战。上午&#xff0c;我们被分成舞龙队、旗手队、拳队、鼓队四个特色团队进行练习。阳光下&#xff0c;我们挥汗如雨&#xff0c;却乐此不疲。鼓声隆隆&#xff0c;龙舞飞扬&#xff…

clickhouse 保证幂等性

在分布式数据库系统 ClickHouse 中&#xff0c;幂等性通常涉及到在相同的操作被重复执行时&#xff0c;保证结果不会因为多次执行而发生变化。为了确保幂等性&#xff0c;ClickHouse 采用了一些机制来避免数据重复插入或处理。 以下是 ClickHouse 保证幂等性的一些关键机制&am…

基于python+django+vue的农产品销售管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…

Docker基本概念详解及优势分析

Docker作为现代开发环境中不可或缺的工具&#xff0c;极大地简化了应用程序的开发、测试和部署流程。本篇文章将介绍Docker的基本概念&#xff0c;包括其架构、优势及常用命令&#xff0c;帮助您快速入门。 Docker是一个基于Go语言开发的开源应用容器引擎&#xff0c;遵循Apach…

【python】OpenCV—Age and Gender Classification

文章目录 1、任务描述2、网络结构2.1 人脸检测2.2 性别分类2.3 年龄分类 3、代码实现4、结果展示5、参考 1、任务描述 性别分类和年龄分类预测 2、网络结构 2.1 人脸检测 输出最高的 200 个 RoI&#xff0c;每个 RoI 7 个值&#xff0c;&#xff08;xx&#xff0c;xx&#x…