当前位置:首页 > JavaScript

js 实现画廊

2026-03-15 05:17:25JavaScript

实现基础画廊结构

使用HTML和CSS创建基础画廊布局,图片以网格形式排列。HTML部分包含一个容器和多个图片元素,CSS设置网格布局或Flexbox。

<div class="gallery">
  <img src="image1.jpg" alt="Image 1">
  <img src="image2.jpg" alt="Image 2">
  <!-- 更多图片 -->
</div>
.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 10px;
  padding: 20px;
}
.gallery img {
  width: 100%;
  height: auto;
  object-fit: cover;
  border-radius: 5px;
  cursor: pointer;
}

添加点击放大功能

通过JavaScript监听图片点击事件,创建模态框显示放大后的图片。

document.querySelectorAll('.gallery img').forEach(img => {
  img.addEventListener('click', () => {
    const modal = document.createElement('div');
    modal.style.position = 'fixed';
    modal.style.top = '0';
    modal.style.left = '0';
    modal.style.width = '100vw';
    modal.style.height = '100vh';
    modal.style.backgroundColor = 'rgba(0,0,0,0.8)';
    modal.style.display = 'flex';
    modal.style.justifyContent = 'center';
    modal.style.alignItems = 'center';
    modal.style.zIndex = '1000';

    const modalImg = document.createElement('img');
    modalImg.src = img.src;
    modalImg.style.maxWidth = '80%';
    modalImg.style.maxHeight = '80%';

    modal.appendChild(modalImg);
    document.body.appendChild(modal);

    modal.addEventListener('click', () => {
      document.body.removeChild(modal);
    });
  });
});

实现滑动切换功能

在模态框中添加导航按钮,允许用户切换上一张或下一张图片。

let currentIndex = 0;
const images = document.querySelectorAll('.gallery img');

function showModal(index) {
  const modal = document.createElement('div');
  modal.style.position = 'fixed';
  // ...模态框样式同上...

  const modalImg = document.createElement('img');
  modalImg.src = images[index].src;
  // ...图片样式同上...

  const prevBtn = document.createElement('button');
  prevBtn.textContent = '❮';
  prevBtn.style.position = 'absolute';
  prevBtn.style.left = '20px';
  prevBtn.style.fontSize = '2rem';
  prevBtn.style.backgroundColor = 'transparent';
  prevBtn.style.border = 'none';
  prevBtn.style.color = 'white';
  prevBtn.style.cursor = 'pointer';

  const nextBtn = document.createElement('button');
  nextBtn.textContent = '❯';
  nextBtn.style.position = 'absolute';
  nextBtn.style.right = '20px';
  // ...样式同上...

  prevBtn.addEventListener('click', (e) => {
    e.stopPropagation();
    currentIndex = (currentIndex - 1 + images.length) % images.length;
    modalImg.src = images[currentIndex].src;
  });

  nextBtn.addEventListener('click', (e) => {
    e.stopPropagation();
    currentIndex = (currentIndex + 1) % images.length;
    modalImg.src = images[currentIndex].src;
  });

  modal.appendChild(prevBtn);
  modal.appendChild(modalImg);
  modal.appendChild(nextBtn);
  document.body.appendChild(modal);

  modal.addEventListener('click', () => {
    document.body.removeChild(modal);
  });
}

images.forEach((img, index) => {
  img.addEventListener('click', () => {
    currentIndex = index;
    showModal(currentIndex);
  });
});

响应式布局优化

通过CSS媒体查询调整画廊在不同屏幕尺寸下的显示效果。

js 实现画廊

@media (max-width: 600px) {
  .gallery {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 400px) {
  .gallery {
    grid-template-columns: 1fr;
  }
}

性能优化建议

  • 使用懒加载技术延迟加载图片,减少初始页面负载。
  • 为图片添加loading="lazy"属性:
    <img src="image1.jpg" alt="Image 1" loading="lazy">
  • 压缩图片文件大小,确保加载速度。

标签: 画廊js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片放大缩小

js实现图片放大缩小

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…