以下是一个实现上述功能的示例代码:

<!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">&times;</span>
  <img src="" alt="">
  <div class="prev">&lt;</div>
  <div class="next">&gt;</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键可以退出大图模式。所有图片都以懒加载模式加载,当缩略图进入视口时,对应的大图会开始加载

html页面的div内有多张连续的缩略图要求实现以下几点功能:1 点击图片后自动载入对应图片的大图并在当前页面全屏显示。2 所有大图均可在大图模式下切换下一张和上一张在PC端显示切换按钮来切换移动端则用滑动切换。3 点击空白处或按ESC可退出大图模式回到页面。4 所有图片在载入时均采用懒加载模式。

原文地址: https://www.cveoy.top/t/topic/is3w 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录