• 项目介绍
  • 功能特点
  • 设计理念
  • 使用方式
  • 常见问题
  • 技术栈
  • 安装和运行
  • 快速开始

DFGallery

现代化的响应式图片画廊应用

项目介绍

DFGallery是一个现代化、响应式的图片画廊应用,专注于提供优秀的图片浏览体验。它采用瀑布流布局,支持灯箱模式、全屏查看、图片旋转缩放等功能,适合用于个人摄影作品展示、图片集分享等场景。

功能特点

响应式瀑布流布局

自动适应不同屏幕尺寸,在桌面端和移动端都能提供良好的浏览体验。

灯箱查看模式

点击图片进入灯箱模式,支持大图查看、左右切换、缩放和旋转。

图片搜索功能

支持按图片标题搜索,快速找到您想要的图片。

全屏模式

支持全屏查看图片,提供沉浸式浏览体验。

图片旋转缩放

在全屏模式下可对图片进行旋转和缩放操作。

图片下载

支持直接下载当前查看的图片,方便保存和分享。

缩略图懒加载

优化图片加载性能,提高页面响应速度。

图片详情信息

显示图片的详细元数据,包括尺寸、分辨率、格式和EXIF信息。

RGB直方图

显示图片的RGB直方图,帮助了解图片的色彩分布。

集成评论系统

基于Waline实现,支持用户对图片进行评论和互动。

设计理念

简洁现代的UI设计

采用简洁、现代的设计风格,突出图片内容本身,减少不必要的视觉干扰。

流畅的动画效果

添加了平滑的过渡动画,包括图片加载、按钮悬停、灯箱打开关闭等,提升用户体验。

移动端优先设计

从设计初期就考虑移动端体验,确保在小屏幕设备上也能提供良好的浏览体验。

无障碍设计

支持键盘导航,包括左右箭头切换图片、ESC键关闭灯箱、F键切换全屏等,方便不同用户使用。

使用方式

基本操作

1

浏览图片

在画廊页面滚动浏览图片,瀑布流布局会自动调整图片排列。

2

查看大图

点击任意图片进入灯箱模式,查看大图。

3

图片导航

在灯箱模式下,使用左右箭头按钮或键盘左右键切换图片。

4

图片下载

点击下载按钮可下载当前查看的图片。

5

全屏查看

点击全屏按钮或按F键进入全屏模式,再次点击或按ESC键退出。

全屏模式操作

6

图片旋转

在全屏模式下,使用旋转按钮可对图片进行顺时针或逆时针旋转。

7

图片缩放

在全屏模式下,使用缩放按钮可放大或缩小图片。

搜索功能

8

搜索图片

在顶部搜索框中输入关键词,按回车键或点击搜索按钮进行搜索,搜索结果会实时显示。

常见问题

全屏模式下图片旋转/缩放后,退出全屏图片仍保持变换状态

问题描述:在全屏模式下对图片进行旋转或缩放操作后,退出全屏模式时,灯箱中的图片仍然保持变换后的状态。

解决方案:系统已自动处理此问题,当您退出全屏模式时,图片会自动重置变换状态,恢复到原始大小和方向。无需手动操作。

技术说明:通过监听浏览器的fullscreenchange事件,当检测到退出全屏状态时,自动调用resetImageTransform()函数重置图片变换属性。

图片加载失败或显示不支持的格式

问题描述:画廊中某些图片显示为加载失败状态,或无法正常显示。

可能原因:

  • 图片格式不受支持(目前支持JPG、PNG、GIF等常见格式)
  • 图片文件损坏或路径不正确
  • 直接打开HTML文件时,浏览器的跨域安全限制导致图片无法加载

解决方案:

  • 将图片转换为JPG或PNG等常见格式
  • 检查图片文件是否完整,路径是否正确
  • 如果是跨域问题,尝试使用HTTP服务器方式运行(参考安装和运行部分)

搜索功能不生效或结果不准确

问题描述:使用搜索功能时,没有找到预期的图片,或搜索结果与关键词不匹配。

可能原因:

  • 搜索功能仅支持按图片标题搜索
  • 图片标题中没有包含搜索关键词
  • 搜索关键词输入有误或过于复杂

解决方案:

  • 确保搜索关键词与图片标题相关
  • 简化搜索关键词,使用更精确的词汇
  • 检查图片标题是否正确设置(可在script.js中修改)

灯箱模式下键盘导航失效

问题描述:在灯箱模式下,使用键盘左右箭头无法切换图片,ESC键无法关闭灯箱。

可能原因:

  • 灯箱未正确激活,焦点不在灯箱窗口内
  • 浏览器或系统的键盘快捷键冲突
  • 某些浏览器扩展可能干扰了键盘事件

解决方案:

  • 点击灯箱内的图片或控制按钮,确保焦点在灯箱内
  • 尝试关闭浏览器扩展或换一个浏览器
  • 检查系统快捷键设置,确保没有冲突

在某些浏览器中全屏模式不工作

问题描述:点击全屏按钮后,页面没有进入全屏模式,或全屏功能异常。

可能原因:

  • 浏览器不支持Fullscreen API(如某些旧版本浏览器)
  • 浏览器或系统的全屏权限被禁用
  • 直接打开HTML文件时,浏览器的安全限制禁用了全屏功能

解决方案:

  • 使用支持Fullscreen API的现代浏览器(Chrome 15+、Firefox 10+、Safari 5.1+)
  • 检查浏览器设置,确保全屏权限已启用
  • 尝试使用HTTP服务器方式运行(参考安装和运行部分)

图片EXIF信息显示不正确或不完整

问题描述:图片详情中显示的EXIF信息(如相机型号、拍摄日期等)不正确或缺失。

可能原因:

  • 图片本身没有包含EXIF信息(如经过编辑或压缩处理)
  • 直接打开HTML文件时,浏览器的跨域安全限制导致无法读取EXIF信息
  • 某些图片格式(如PNG)不支持EXIF信息

解决方案:

  • 使用包含完整EXIF信息的原始图片
  • 尝试使用HTTP服务器方式运行(参考安装和运行部分)
  • 对于PNG图片,EXIF信息可能不完整,这是正常现象

项目部署在Cloudflare/腾讯EdgeOne,图片存储在微软OneDrive时出现问题

问题描述:将DFGallery项目部署在Cloudflare存储桶或腾讯EdgeOne存储桶,但图片资源存储在微软OneDrive上,通过OneDrive共享链接加载图片时,出现图片无法显示、EXIF信息无法读取或下载功能失效等问题。

可能原因:

  • OneDrive的共享链接不支持跨域资源共享(CORS),阻止了Cloudflare/EdgeOne域名的跨域请求
  • OneDrive的共享链接格式可能包含重定向,导致图片无法直接访问
  • OneDrive的共享链接可能有访问限制、过期时间或需要登录验证
  • Exif.js无法读取跨域OneDrive图片的元数据
  • 图片下载功能失效,因为OneDrive链接可能重定向到登录页面而非直接下载
  • OneDrive的共享链接格式可能随时变化,导致图片链接失效

解决方案:

1. OneDrive正确的图片分享方式
  • 确保使用"公开"或"任何人可查看"的分享权限,而非"仅限特定人员"
  • 获取OneDrive图片的直接下载链接,而非默认的分享页面链接
  • 转换OneDrive分享链接为直接下载格式:
    • 原始链接:https://1drv.ms/i/s!Axxxxxxxxxxxxxx
    • 转换为直接下载链接:https://1drv.ws/x/s!Axxxxxxxxxxxxxx(将1drv.ms替换为1drv.ws)
    • 或使用:https://api.onedrive.com/v1.0/shares/u!xxx/root/content(需要正确的分享ID)
2. 处理CORS问题
  • OneDrive本身不支持自定义CORS配置,因此无法直接允许跨域请求
  • 解决方案1:使用CORS代理服务,如:
    • Cloudflare Workers:创建一个简单的Worker作为CORS代理
    • 第三方CORS代理:如cors-anywhere.herokuapp.com(注意安全风险)
    • 自定义后端服务器:部署一个简单的后端服务来代理图片请求
  • 解决方案2:将OneDrive图片批量下载后重新上传到与项目同域的存储服务
3. 修改代码适配OneDrive图片

对于图片显示:

  • 确保使用正确的OneDrive直接下载链接格式
  • 考虑添加图片加载失败的备用方案,如显示默认图片

对于EXIF信息读取:

  • 由于OneDrive不支持CORS,Exif.js可能无法直接读取EXIF信息
  • 解决方案:在项目中预先存储图片的EXIF信息,或使用服务器端提取后提供API

对于图片下载功能:

  • 直接使用OneDrive下载链接可能会失败,因为浏览器的跨域策略限制
  • 解决方案1:使用Canvas API将图片绘制到画布上,然后转换为数据URL进行下载
  • 解决方案2:使用CORS代理服务获取图片数据,然后提供下载
4. 提高OneDrive图片链接的稳定性
  • 避免使用临时共享链接,使用永久共享设置
  • 考虑将重要图片备份到与项目同域的存储服务
  • 定期检查OneDrive图片链接的有效性
  • 使用相对稳定的OneDrive API链接格式,而非简短分享链接
5. 替代方案:使用支持CORS的图片存储服务
  • 考虑将图片迁移到支持CORS配置的存储服务,如:
    • Cloudflare R2
    • 腾讯云COS
    • 阿里云OSS
    • Amazon S3
  • 这些服务允许自定义CORS规则,与Cloudflare/EdgeOne部署的项目配合更顺畅

注意事项:

  • OneDrive的服务条款可能限制商业用途或大量访问,使用前请仔细阅读
  • CORS代理服务可能带来安全风险,建议使用自己部署的代理
  • OneDrive的API和链接格式可能随时变化,导致图片无法访问
  • 考虑使用CDN缓存OneDrive图片,提高访问速度和稳定性

技术栈

HTML5 CSS3 JavaScript (ES6+) Font Awesome Exif.js Canvas API Intersection Observer Waline

安装和运行

本地运行

方法一:直接打开文件(推荐)

1. 下载项目文件到本地

2. 直接双击 index.html 文件即可在浏览器中打开

方法二:使用HTTP服务器

1. 下载项目文件到本地

2. 启动本地HTTP服务器,例如使用Python:

# Python 3 python -m http.server 8000 # Python 2 python -m SimpleHTTPServer 8000

3. 在浏览器中访问 http://localhost:8000

部署到服务器

1. 将项目文件上传到您的Web服务器

2. 通过域名或IP地址访问

自定义配置

您可以通过修改以下文件来自定义画廊:

  • script.js - 修改图片数据和核心逻辑
  • style.css - 修改样式和布局
  • index.html - 修改HTML结构

添加图片

1. 将图片添加到 images/ 目录

2. 生成缩略图并添加到 thumbnails/ 目录(可使用 generate-thumbnails.js 脚本)

3. 在 script.js 的 images 数组中添加图片信息

快速开始

点击下方按钮查看在线演示:

查看画廊演示

© 2025 DFGallery. 所有权利保留。