前端开发社区前端开发社区
  • 首页
  • VUE.js
  • React.js
  • HTML
  • CSS
  • JavaScript
  • PHP
  • jquery
  • Java
  • MySQL
  • uniapp
前端开发社区
当前位置:首页 > JavaScript

js 实现画廊

2026-04-06 22:49:54JavaScript

使用纯JavaScript实现基础画廊

创建HTML结构,包含图片容器和导航按钮

<div class="gallery">
  <div class="gallery-container">
    <img src="image1.jpg" class="active">
    <img src="image2.jpg">
    <img src="image3.jpg">
  </div>
  <button class="prev">Previous</button>
  <button class="next">Next</button>
</div>

添加CSS样式控制画廊布局

.gallery {
  position: relative;
  width: 800px;
  margin: 0 auto;
}

.gallery-container img {
  display: none;
  width: 100%;
  height: auto;
}

.gallery-container img.active {
  display: block;
}

button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

.prev {
  left: 10px;
}

.next {
  right: 10px;
}

实现JavaScript画廊功能

document.addEventListener('DOMContentLoaded', function() {
  const images = document.querySelectorAll('.gallery-container img');
  const prevBtn = document.querySelector('.prev');
  const nextBtn = document.querySelector('.next');
  let currentIndex = 0;

  function showImage(index) {
    images.forEach(img => img.classList.remove('active'));
    images[index].classList.add('active');
  }

  prevBtn.addEventListener('click', function() {
    currentIndex = (currentIndex > 0) ? currentIndex - 1 : images.length - 1;
    showImage(currentIndex);
  });

  nextBtn.addEventListener('click', function() {
    currentIndex = (currentIndex < images.length - 1) ? currentIndex + 1 : 0;
    showImage(currentIndex);
  });

  // 自动轮播
  setInterval(function() {
    currentIndex = (currentIndex < images.length - 1) ? currentIndex + 1 : 0;
    showImage(currentIndex);
  }, 3000);

  showImage(currentIndex);
});

使用Swiper.js实现高级画廊

安装Swiper.js库

js 实现画廊

npm install swiper

HTML结构

<div class="swiper">
  <div class="swiper-wrapper">
    <div class="swiper-slide">
      <img src="image1.jpg">
    </div>
    <div class="swiper-slide">
      <img src="image2.jpg">
    </div>
    <div class="swiper-slide">
      <img src="image3.jpg">
    </div>
  </div>
  <div class="swiper-pagination"></div>
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>
</div>

初始化Swiper

import Swiper from 'swiper';
import 'swiper/css';

const swiper = new Swiper('.swiper', {
  loop: true,
  autoplay: {
    delay: 3000,
  },
  pagination: {
    el: '.swiper-pagination',
    clickable: true,
  },
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
  },
});

响应式画廊实现

添加媒体查询适应不同屏幕

js 实现画廊

@media (max-width: 768px) {
  .gallery {
    width: 100%;
  }

  .gallery-container img {
    height: 300px;
    object-fit: cover;
  }
}

JavaScript添加触摸事件支持

let touchStartX = 0;
let touchEndX = 0;

galleryContainer.addEventListener('touchstart', function(e) {
  touchStartX = e.changedTouches[0].screenX;
}, false);

galleryContainer.addEventListener('touchend', function(e) {
  touchEndX = e.changedTouches[0].screenX;
  handleSwipe();
}, false);

function handleSwipe() {
  if (touchEndX < touchStartX) {
    // 向左滑动,显示下一张
    currentIndex = (currentIndex < images.length - 1) ? currentIndex + 1 : 0;
  }
  if (touchEndX > touchStartX) {
    // 向右滑动,显示上一张
    currentIndex = (currentIndex > 0) ? currentIndex - 1 : images.length - 1;
  }
  showImage(currentIndex);
}

图片懒加载优化

修改HTML添加data-src属性

<img data-src="image1.jpg" class="active">
<img data-src="image2.jpg">
<img data-src="image3.jpg">

实现懒加载功能

function lazyLoadImages() {
  const lazyImages = document.querySelectorAll('img[data-src]');

  const imageObserver = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const img = entry.target;
        img.src = img.getAttribute('data-src');
        img.removeAttribute('data-src');
        imageObserver.unobserve(img);
      }
    });
  });

  lazyImages.forEach(img => imageObserver.observe(img));
}

document.addEventListener('DOMContentLoaded', lazyLoadImages);

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

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现路由

js实现路由

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

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

最新文章
  • js实现empty

    2026-04-07 00:43:42

  • js实现射箭

    2026-04-07 00:42:24

  • js 实现窗口

    2026-04-07 00:40:45

  • js实现123

    2026-04-07 00:37:33

  • js实现选区

    2026-04-07 00:35:56

标签列表
  • vue (13931)
  • 原理 (626)
  • 分页 (603)
  • 跳转 (582)
  • 页面 (1094)
  • 路由 (650)
  • 列表 (473)
  • 功能 (1256)
  • 文件 (456)
  • 项目 (532)
  • 菜单 (444)
  • 组件 (1026)
  • 表格 (673)
  • 数据 (497)
  • 图片 (790)
  • js (4916)
  • 如何实现 (1693)
  • 效果 (625)
  • react (3311)
  • jquery (2238)
  • css (2728)
  • php (4572)
  • java (3021)
  • uniapp (1363)
  • elementui (828)

陕ICP备2023000799号  网站地图

Powered By Z-BlogPHP. Theme by TOYEAN.