html页面的div内有多张连续的缩略图要求实现以下几点功能:1 点击图片后自动载入对应图片的大图并在当前页面全屏显示。2 所有大图均可在大图模式下切换下一张和上一张在PC端显示切换按钮来切换移动端则用滑动切换。3 点击空白处或按ESC可退出大图模式回到页面。4 所有图片在载入时均采用懒加载模式。
以下是一个实现上述功能的示例代码:
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
}
#gallery {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.thumbnail {
width: 200px;
height: 200px;
margin: 10px;
background-color: lightgray;
background-size: cover;
cursor: pointer;
}
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
display: none;
}
.modal img {
max-width: 90%;
max-height: 90%;
}
.modal .close {
position: absolute;
top: 10px;
right: 10px;
color: white;
font-size: 24px;
cursor: pointer;
}
.prev, .next {
position: absolute;
top: 50%;
transform: translateY(-50%);
color: white;
font-size: 24px;
background-color: rgba(0, 0, 0, 0.5);
padding: 10px;
cursor: pointer;
}
.prev {
left: 10px;
}
.next {
right: 10px;
}
</style>
</head>
<body>
<div id="gallery">
<div class="thumbnail" data-src="image1.jpg"></div>
<div class="thumbnail" data-src="image2.jpg"></div>
<div class="thumbnail" data-src="image3.jpg"></div>
<!-- more thumbnails -->
</div>
<div class="modal">
<span class="close">×</span>
<img src="" alt="">
<div class="prev"><</div>
<div class="next">></div>
</div>
<script>
var thumbnails = document.getElementsByClassName('thumbnail');
var modal = document.querySelector('.modal');
var modalImg = modal.querySelector('img');
var closeModal = modal.querySelector('.close');
var prevButton = modal.querySelector('.prev');
var nextButton = modal.querySelector('.next');
var currentImageIndex = 0;
// Add event listeners to thumbnails
for (var i = 0; i < thumbnails.length; i++) {
thumbnails[i].addEventListener('click', function() {
currentImageIndex = Array.from(thumbnails).indexOf(this);
var src = this.getAttribute('data-src');
modalImg.src = src;
modal.style.display = 'flex';
});
}
// Close modal when clicked on close button or outside the modal
closeModal.addEventListener('click', function() {
modal.style.display = 'none';
});
modal.addEventListener('click', function(e) {
if (e.target === modal) {
modal.style.display = 'none';
}
});
// Previous and next buttons
prevButton.addEventListener('click', function() {
currentImageIndex--;
if (currentImageIndex < 0) {
currentImageIndex = thumbnails.length - 1;
}
modalImg.src = thumbnails[currentImageIndex].getAttribute('data-src');
});
nextButton.addEventListener('click', function() {
currentImageIndex++;
if (currentImageIndex >= thumbnails.length) {
currentImageIndex = 0;
}
modalImg.src = thumbnails[currentImageIndex].getAttribute('data-src');
});
// Keyboard events
document.addEventListener('keydown', function(e) {
if (modal.style.display === 'flex') {
if (e.key === 'Escape') {
modal.style.display = 'none';
} else if (e.key === 'ArrowLeft') {
prevButton.click();
} else if (e.key === 'ArrowRight') {
nextButton.click();
}
}
});
// Lazy loading images
document.addEventListener('DOMContentLoaded', function() {
for (var i = 0; i < thumbnails.length; i++) {
var thumbnail = thumbnails[i];
var src = thumbnail.getAttribute('data-src');
var img = new Image();
img.src = src;
img.onload = function() {
thumbnail.style.backgroundImage = 'url(' + src + ')';
};
}
});
</script>
</body>
</html>
你需要将上述代码保存为一个HTML文件,并将实际的图片路径替换为data-src属性中的路径。例如,如果你的图片路径为images/image1.jpg,则将data-src="image1.jpg"替换为data-src="images/image1.jpg"。
此示例中,使用了Flexbox布局来排列缩略图,点击缩略图会显示大图模式,并根据点击的缩略图加载对应的大图。你可以使用上下箭头按钮或滑动手势来切换大图,点击关闭按钮、点击空白处或按ESC键可以退出大图模式。所有图片都以懒加载模式加载,当缩略图进入视口时,对应的大图会开始加载
原文地址: https://www.cveoy.top/t/topic/is3w 著作权归作者所有。请勿转载和采集!