DOM操作和事件监听综合练习:利用JS实现图片轮播
我们经常会看到购物网页上有商品图片在自动循环播放,这就是图片轮播,图片轮播是一种常见的网页设计元素,用于在网页上自动切换显示多张图片或内容。它通过JavaScript来实现图片的自动轮播效果,结合HTML和CSS来完成布局和样式设置。如下效果:
20241110_150122
以上就是图片轮播的效果,下面详细讲解代码的运用,实现上面视频的效果。大家也可以自己试试看,或者复制最后完整代码试试吧!
一、HTML部分
在HTML中创建一个包含轮播图的容器,通常使用<div>元素,并为其添加一个唯一的ID。
1、设置一个div容器用于显示图片的区域
<body>
<div class="carousel-container">
<img src="./img_src/p1.jpg" class="carousel-image" id="img1">
</div>
</body>
2、设置图片按钮切换区域
<body>
<div class="clear_ele change-image">
<p class="button" id="p1">第1张</p>
<p class="button" id="p2">第2张</p>
<p class="button" id="p3">第3张</p>
<p class="button" id="p4">第4张</p>
</div>
</body>
3、设置提示信息区域
为了让用户可以知道点击Enter键可以停止轮播,要设置一个区域显示图片轮播的状态信息。
<body>
<div id="output">图片轮播关闭......(按Enter键开启轮播)</div>
</body>
HTML部分基本结构就完成了,代码如下:
<body>
<div class="carousel-container">
<img src="./img_src/p1.jpg" class="carousel-image" id="img1">
</div>
<div class="clear_ele change-image">
<p class="button" id="p1">第1张</p>
<p class="button" id="p2">第2张</p>
<p class="button" id="p3">第3张</p>
<p class="button" id="p4">第4张</p>
</div>
<div id="output">图片轮播关闭......(按Enter键开启轮播)</div>
</script>
</body>
二、CSS样式
通过CSS对容器和列表进行布局和样式设置,例如设置容器的宽度、高度、背景色等,并设置列表项的宽度和高度,以及布局方式。
代码如下:
<style>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
.carousel-container {
position: relative;
width: 50%;
height:55%; /* 根据需要设置高度 */
border: 4px red solid;
background-color: gray;
}
.carousel-container .carousel-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 1; /* 不透明度0-1 */
}
.change-image{
width: 15%;
height: 3%;
/* border: 1px purple solid; */
position: absolute;
top: 30%;
left: 5%;
}
.change-image .button{
width: 60px;
height: 30px;
color: white;
text-align: center;
background-color: red;
border-radius: 10px;
margin-left: 9px;
float: left;
}
#output {
color: white;
background-color: red;
text-align: center;
width: 20%;
height: 3%;
margin-top: 1%;
position: relative;
left: 5%;
border-radius: 10px;
}
.clear_ele::after{
content: ""; /* 这个伪元素的内容属性必须有 */
display: block;
/* border: 6px purple dashed; */
clear: both;
}
效果如下:
三、JavaScript代码
使用JavaScript来实现轮播图的功能。
1、实现主动轮播
(1)获取图片元素和初始化变量,获取id为img1的图片元素
const imgElement = document.getElementById("img1");
(2)定义自动切换图片的函数。定义变量scroll_img并初始化为false,用于控制自动轮播的开启和关闭状态,定义一个自动轮播的函数,当showNextImage1函数在scroll_img为true时执行图片切换逻辑
function showNextImage1() {
if(scroll_img){
if(i>4){
i = 1;
}else{
imgElement.src = `./img_src/p${i}.jpg`;
i = i + 1;
}
}
}
其中,如果 i 大于 4,将 i 重置为 1,实现循环切换。否则,根据当前的 i 值设置图片元素的 src 属性为 ./img_src/p${i}.jpg,然后 i 的值加 1,切换到下一张图片。
(3)设置每1秒切换一次图片 (无限循环)
setInterval(showNextImage1, 500);
2、实现四个按钮切换图片
(1)获取元素
const p = document.getElementsByTagName("p");
(2)为四个按钮添加事件监听, click:单击鼠标时触发
p[0].addEventListener("click",
function(){
i = 1;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[1].addEventListener("click",
function(){
i = 2;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[2].addEventListener("click",
function(){
i = 3;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[3].addEventListener("click",
function(){
i = 4;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
3、实现回车键控制轮播是否开启
(1)获取显示提示信息的元素
const outputDiv = document.getElementById('output');
(2)添加键盘按下事件监听
document.addEventListener('keydown',
function(event) {
const keyCode = event.key;
if(keyCode==="Enter"){
scroll_img = !scroll_img;
}
if (scroll_img) {
outputDiv.textContent = "图片轮播开启......(按Enter键关闭轮播)";
outputDiv.style.backgroundColor = "green";
} else {
outputDiv.textContent = "图片轮播关闭......(按Enter键开启轮播)";
outputDiv.style.backgroundColor = "red";
}
}
把以上全部代码结合在一起,就能实现简单的图片轮播,代码如下:(快复制代码试试吧)
<!DOCTYPE html>
<html lang="en">
<head>
<title>图片自动切换(轮播图效果)</title>
<style>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
.carousel-container {
position: relative;
width: 50%;
height:55%; /* 根据需要设置高度 */
border: 4px red solid;
background-color: gray;
}
.carousel-container .carousel-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 1; /* 不透明度0-1 */
}
.change-image{
width: 15%;
height: 3%;
/* border: 1px purple solid; */
position: absolute;
top: 30%;
left: 5%;
}
.change-image .button{
width: 60px;
height: 30px;
color: white;
text-align: center;
background-color: red;
border-radius: 10px;
margin-left: 9px;
float: left;
}
#output {
color: white;
background-color: red;
text-align: center;
width: 20%;
height: 3%;
margin-top: 1%;
position: relative;
left: 5%;
border-radius: 10px;
}
.clear_ele::after{
content: ""; /* 这个伪元素的内容属性必须有 */
display: block;
/* border: 6px purple dashed; */
clear: both;
}
</style>
</head>
<body>
<div class="carousel-container">
<img src="./img_src/p1.jpg" class="carousel-image" id="img1">
</div>
<div class="clear_ele change-image">
<p class="button" id="p1">第1张</p>
<p class="button" id="p2">第2张</p>
<p class="button" id="p3">第3张</p>
<p class="button" id="p4">第4张</p>
</div>
<div id="output">图片轮播关闭......(按Enter键开启轮播)</div>
<script>
// 【实现自动轮播】
//1、获取图片元素和初始化变量,获取id为img1的图片元素
const imgElement = document.getElementById("img1");
//1为当前显示的图片序号
var i = 1;
var scroll_img = false;
//2、定义自动切换图片的函数
function showNextImage1() {
if(scroll_img){
if(i>4){
i = 1;
}else{
imgElement.src = `./img_src/p${i}.jpg`;
i = i + 1;
}
}
}
// 每1秒切换一次图片 (无限循环)
setInterval(showNextImage1, 500);
// 【实现四个按钮切换图片】
const p = document.getElementsByTagName("p");
//为四个按钮添加事件监听
p[0].addEventListener("click",
function(){
i = 1;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[1].addEventListener("click",
function(){
i = 2;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[2].addEventListener("click",
function(){
i = 3;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
p[3].addEventListener("click",
function(){
i = 4;
imgElement.src = `./img_src/p${i}.jpg`;
}
)
// 【实现回车键控制轮播是否开启】
//1、获取显示提示信息的元素
const outputDiv = document.getElementById('output');
//2、添加键盘按下事件监听
document.addEventListener('keydown',
function(event) {
const keyCode = event.key;
if(keyCode==="Enter"){
scroll_img = !scroll_img;
}
if (scroll_img) {
outputDiv.textContent = "图片轮播开启......(按Enter键关闭轮播)";
outputDiv.style.backgroundColor = "green";
} else {
outputDiv.textContent = "图片轮播关闭......(按Enter键开启轮播)";
outputDiv.style.backgroundColor = "red";
}
}
);
</script>
</body>
</html>
原文地址:https://blog.csdn.net/2401_87197766/article/details/143661280
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!