以下是一个简单的解决方法,使用PhotoSwipe,Rails和CoffeeScript来创建一个工作的图像库:
首先,确保你的Rails应用中已经安装了PhotoSwipe库。你可以使用yarn
或npm
来安装它:
yarn add photoswipe
或
npm install photoswipe
接下来,在你的Rails应用中创建一个新的CoffeeScript文件(例如,photoswipe.js.coffee
),并添加以下代码:
# 导入PhotoSwipe的CSS文件
import 'photoswipe/dist/photoswipe.css'
import 'photoswipe/dist/default-skin/default-skin.css'
# 导入PhotoSwipe库
import PhotoSwipe from 'photoswipe'
import PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default'
# 在DOM加载完成后运行以下代码
document.addEventListener 'DOMContentLoaded', ->
# 获取所有需要展示的图像元素
images = document.querySelectorAll('.photoswipe-image')
# 创建一个数组来存储图像的信息
items = []
# 遍历图像元素并添加它们到数组中
for image in images
item =
src: image.getAttribute('href')
w: image.getAttribute('data-width')
h: image.getAttribute('data-height')
title: image.getAttribute('data-title')
items.push(item)
# 创建一个点击事件处理程序,当用户点击图像时,显示PhotoSwipe图像库
openPhotoSwipe = (index) ->
gallery = new PhotoSwipe(document.querySelector('.pswp'), PhotoSwipeUI_Default, items, { index: index })
gallery.init()
# 将点击事件处理程序绑定到每个图像元素上
for i in [0...images.length]
images[i].addEventListener 'click', (i) ->
(event) ->
event.preventDefault()
openPhotoSwipe(i), false
在你的视图文件中,添加一个包含photoswipe-image
类的<a>
标签,并设置相关的data
属性:
<a class="photoswipe-image" href="/path/to/image.jpg" data-width="800" data-height="600" data-title="Image Title">
<img src="/path/to/thumbnail.jpg" alt="Image">
</a>
最后,在你的布局文件中,添加一个用于显示PhotoSwipe的DOM元素:
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<div class="pswp__bg"></div>
<div class="pswp__scroll-wrap">
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
现在,当你点击图像