JavaScript 图片画廊设计案例

JavaScript 图片画廊设计案例

项目简介

本项目展示了如何通过 JavaScript 构建一个交互式的图片画廊。用户可以点击画廊中的图片以查看其大图,并通过左右箭头切换显示的图片。项目中还包括了基本的动画效果,提升用户体验。

技术栈

  • HTML
  • CSS
  • JavaScript

设计目标

  1. 显示缩略图:用户可以查看多个小图作为画廊的缩略图。
  2. 查看大图:点击某个缩略图后,展示该图片的放大版。
  3. 切换图片:通过左右箭头切换显示的图片。
  4. 添加动画效果:图片切换时添加淡入淡出效果。

项目结构

- index.html
- style.css
- script.js
  • index.html
DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图片画廊title>
    <link rel="stylesheet" href="style.css">
head>
<body>
    <div class="gallery-container">
        <div class="main-image">
            <img id="large-img" src="img1.jpg" alt="大图">
            <div class="arrow left" id="prev">div>
            <div class="arrow right" id="next">div>
        div>
        <div class="thumbnail-container">
            <img class="thumbnail" src="img1.jpg" alt="缩略图">
            <img class="thumbnail" src="img2.jpg" alt="缩略图">
            <img class="thumbnail" src="img3.jpg" alt="缩略图">
            <img class="thumbnail" src="img4.jpg" alt="缩略图">
        div>
    div>
    <script src="script.js">script>
body>
html>

  • style.css
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.gallery-container {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.main-image {
    position: relative;
    width: 500px;
    height: 350px;
    margin-bottom: 20px;
    overflow: hidden;
}

.main-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: opacity 0.5s ease-in-out;
}

.arrow {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    font-size: 30px;
    color: white;
    background-color: rgba(0, 0, 0, 0.5);
    padding: 10px;
    cursor: pointer;
}

.arrow.left {
    left: 10px;
}

.arrow.right {
    right: 10px;
}

.thumbnail-container {
    display: flex;
    gap: 10px;
}

.thumbnail {
    width: 80px;
    height: 60px;
    object-fit: cover;
    cursor: pointer;
    transition: transform 0.3s ease;
}

.thumbnail:hover {
    transform: scale(1.1);
}

  • script.js
// 获取 DOM 元素
const largeImg = document.getElementById('large-img');
const thumbnails = document.querySelectorAll('.thumbnail');
const prevArrow = document.getElementById('prev');
const nextArrow = document.getElementById('next');

// 图片列表
const images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg'];
let currentIndex = 0;

// 更新大图函数
const updateLargeImage = (index) => {
    largeImg.style.opacity = 0;
    setTimeout(() => {
        largeImg.src = images[index];
        largeImg.style.opacity = 1;
    }, 500);
};

// 点击缩略图更新大图
thumbnails.forEach((thumbnail, index) => {
    thumbnail.addEventListener('click', () => {
        currentIndex = index;
        updateLargeImage(currentIndex);
    });
});

// 切换到上一张图片
prevArrow.addEventListener('click', () => {
    currentIndex = (currentIndex - 1 + images.length) % images.length;
    updateLargeImage(currentIndex);
});

// 切换到下一张图片
nextArrow.addEventListener('click', () => {
    currentIndex = (currentIndex + 1) % images.length;
    updateLargeImage(currentIndex);
});

// 初始化显示第一张图片
updateLargeImage(currentIndex);

功能实现说明

1. 显示缩略图

页面中展示了多个缩略图,用户可以点击任何一个缩略图来查看对应的大图。每个缩略图都是一个图片元素,大小为 80x60px。

2. 查看大图

当用户点击缩略图时,主区域的图片会更新为点击的缩略图对应的图片,并且大图显示在一个 500x350px 的区域内。

3. 左右切换图片

页面提供了左右箭头按钮,用户可以通过点击这些按钮来切换图片。每次切换时,页面会淡入新的图片,提供平滑的用户体验。

4. 动画效果

每次图片切换时,使用 opacity 属性来进行淡入效果,使得用户体验更加流畅和自然。同时,缩略图也具有 hover 效果,鼠标悬停时缩略图会稍微放大,增加互动性。

5. 代码结构

HTML 结构简洁,包含主图区域和缩略图区域。
CSS 使用了简单的布局和动画,确保界面美观且响应迅速。
JavaScript 通过操作 DOM 来更新图片和处理用户的点击事件,确保画廊的交互性和流畅性。

总结

通过本案例,你可以学习到如何使用 JavaScript 创建一个交互式的图片画廊。它包含了基本的 DOM 操作、事件监听和动画效果,可以进一步扩展为更复杂的图片浏览器,如添加图片描述、支持触摸滑动等功能。

这个案例比简单的任务管理应用更具挑战性,它引入了更复杂的用户交互和动画效果,非常适合有一定 JavaScript 基础的开发者练习。

你可能感兴趣的:(javascript)