<!DOCTYPE html>
<html>
<head>
<style>
.thumbnail {
  display: inline-block;
  width: 100px;
  height: 100px;
}
<p>.fullscreen {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.9);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
overflow: hidden;
}</p>
<p>.fullscreen img {
max-width: 100%;
max-height: 100%;
}</p>
<p>.prev, .next {
position: fixed;
top: 50%;
transform: translateY(-50%);
font-size: 40px;
color: white;
cursor: pointer;
z-index: 9999;
}</p>
<p>.prev {
left: 20px;
}</p>
<p>.next {
right: 20px;
}
</style></p>
</head>
<body>
<div id="gallery">
  <div class="thumbnail">
    <img src="thumbnail1.jpg" data-src="image1.jpg" alt="Image 1">
  </div>
  <div class="thumbnail">
    <img src="thumbnail2.jpg" data-src="image2.jpg" alt="Image 2">
  </div>
  <div class="thumbnail">
    <img src="thumbnail3.jpg" data-src="image3.jpg" alt="Image 3">
  </div>
  <!-- Add more thumbnails here -->
</div>
<script>
var thumbnails = document.querySelectorAll('.thumbnail');
var fullscreen = document.createElement('div');
var currentIndex = 0;

function showFullscreenImage(index) {
  var img = document.createElement('img');
  img.src = thumbnails[index].querySelector('img').dataset.src;
  img.alt = thumbnails[index].querySelector('img').alt;

  fullscreen.innerHTML = '';
  fullscreen.appendChild(img);
  document.body.appendChild(fullscreen);
  document.addEventListener('keydown', closeFullscreenOnEsc);
}

function closeFullscreen() {
  fullscreen.innerHTML = '';
  document.body.removeChild(fullscreen);
  document.removeEventListener('keydown', closeFullscreenOnEsc);
}

function closeFullscreenOnEsc(event) {
  if (event.key === 'Escape') {
    closeFullscreen();
  }
}

function showPreviousImage() {
  currentIndex = (currentIndex - 1 + thumbnails.length) % thumbnails.length;
  showFullscreenImage(currentIndex);
}

function showNextImage() {
  currentIndex = (currentIndex + 1) % thumbnails.length;
  showFullscreenImage(currentIndex);
}

thumbnails.forEach(function(thumbnail, index) {
  thumbnail.addEventListener('click', function() {
    currentIndex = index;
    showFullscreenImage(currentIndex);
  });
});

document.addEventListener('click', function(event) {
  if (event.target === fullscreen) {
    closeFullscreen();
  }
});

document.addEventListener('keydown', function(event) {
  if (event.key === 'ArrowLeft') {
    showPreviousImage();
  } else if (event.key === 'ArrowRight') {
    showNextImage();
  }
});

document.addEventListener('touchstart', function(event) {
  var startX = event.changedTouches[0].clientX;

  document.addEventListener('touchend', function(event) {
    var endX = event.changedTouches[0].clientX;
    var difference = startX - endX;

    if (difference > 50) {
      showNextImage();
    } else if (difference < -50) {
      showPreviousImage();
    }
  }, { once: true });
});

fullscreen.addEventListener('touchstart', function(event) {
  event.preventDefault();
});

fullscreen.addEventListener('touchmove', function(event) {
  event.preventDefault();
});

var lazyImages = document.querySelectorAll('img[data-src]');

function lazyLoadImage(image) {
  image.src = image.dataset.src;
  image.removeAttribute('data-src');
}

if ('IntersectionObserver' in window) {
  var lazyImageObserver = new IntersectionObserver(function(entries, observer) {
    entries.forEach(function(entry) {
      if (entry.isIntersecting) {
        lazyLoadImage(entry.target);
        lazyImageObserver.unobserve(entry.target);
      }
    });
  });

  lazyImages.forEach(function(lazyImage) {
    lazyImageObserver.observe(lazyImage);
  });
} else {
  lazyImages.forEach(function(lazyImage) {
    lazyLoadImage(lazyImage);
  });
}
</script>
</body>
</html>
HTML 页面缩略图全屏展示:点击放大、滑动切换、懒加载

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

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