当前位置:首页 > JavaScript

js 实现相册

2026-04-06 05:51:40JavaScript

使用HTML5和JavaScript实现相册功能

创建一个基础的相册功能需要结合HTML结构、CSS样式和JavaScript交互逻辑。以下是一个简单实现方案:

HTML结构

<div class="photo-gallery">
  <div class="thumbnails">
    <img src="thumb1.jpg" data-full="full1.jpg" alt="Photo 1">
    <img src="thumb2.jpg" data-full="full2.jpg" alt="Photo 2">
  </div>
  <div class="full-view">
    <img id="main-photo" src="placeholder.jpg">
    <div class="controls">
      <button id="prev-btn">Previous</button>
      <button id="next-btn">Next</button>
    </div>
  </div>
</div>

CSS样式

.photo-gallery {
  display: flex;
  gap: 20px;
}
.thumbnails {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.thumbnails img {
  width: 100%;
  cursor: pointer;
  transition: transform 0.2s;
}
.thumbnails img:hover {
  transform: scale(1.05);
}
.full-view {
  flex-grow: 1;
}
#main-photo {
  max-width: 100%;
  max-height: 80vh;
}
.controls {
  margin-top: 10px;
}

JavaScript逻辑

document.addEventListener('DOMContentLoaded', function() {
  const thumbnails = document.querySelectorAll('.thumbnails img');
  const mainPhoto = document.getElementById('main-photo');
  const prevBtn = document.getElementById('prev-btn');
  const nextBtn = document.getElementById('next-btn');
  let currentIndex = 0;

  // 缩略图点击事件
  thumbnails.forEach((thumb, index) => {
    thumb.addEventListener('click', () => {
      currentIndex = index;
      updateMainPhoto();
    });
  });

  // 更新主图显示
  function updateMainPhoto() {
    mainPhoto.src = thumbnails[currentIndex].dataset.full;
    thumbnails.forEach(thumb => thumb.classList.remove('active'));
    thumbnails[currentIndex].classList.add('active');
  }

  // 导航按钮
  prevBtn.addEventListener('click', () => {
    currentIndex = (currentIndex - 1 + thumbnails.length) % thumbnails.length;
    updateMainPhoto();
  });

  nextBtn.addEventListener('click', () => {
    currentIndex = (currentIndex + 1) % thumbnails.length;
    updateMainPhoto();
  });

  // 初始化
  updateMainPhoto();
});

增强功能实现

对于更复杂的相册功能,可以考虑以下扩展:

图片懒加载

const lazyLoad = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      lazyLoad.unobserve(img);
    }
  });
});

document.querySelectorAll('img[data-src]').forEach(img => {
  lazyLoad.observe(img);
});

图片预加载

function preloadImages() {
  thumbnails.forEach(thumb => {
    const img = new Image();
    img.src = thumb.dataset.full;
  });
}

响应式布局调整

function adjustLayout() {
  if (window.innerWidth < 768) {
    document.querySelector('.photo-gallery').style.flexDirection = 'column';
  } else {
    document.querySelector('.photo-gallery').style.flexDirection = 'row';
  }
}

window.addEventListener('resize', adjustLayout);
adjustLayout();

第三方库方案

对于更专业的实现,可以考虑使用现有库:

PhotoSwipe

import PhotoSwipe from 'photoswipe';
import PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';

const pswp = document.querySelector('.pswp');
const items = [
  {
    src: 'image1.jpg',
    w: 1200,
    h: 800
  },
  {
    src: 'image2.jpg',
    w: 1600,
    h: 900
  }
];

document.querySelectorAll('.gallery-item').forEach((item, index) => {
  item.addEventListener('click', () => {
    const gallery = new PhotoSwipe(pswp, PhotoSwipeUI_Default, items, {index});
    gallery.init();
  });
});

Lightbox2

js 实现相册

<link href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/css/lightbox.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/js/lightbox.min.js"></script>

<a href="image1.jpg" data-lightbox="gallery" data-title="Image 1">
  <img src="thumb1.jpg" alt="">
</a>

这些实现方案可以根据具体需求进行组合和扩展,构建出功能完善的相册应用。

标签: 相册js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…