是使用React的useState和useEffect钩子来管理状态和副作用。
首先,我们需要创建一个Lightbox组件,它将接收一个图片数组作为props,并在点击图片时显示Lightbox。
import React, { useState, useEffect } from 'react';
const Lightbox = ({ images }) => {
const [isOpen, setIsOpen] = useState(false);
const [currentImage, setCurrentImage] = useState(null);
const openLightbox = (index) => {
setCurrentImage(index);
setIsOpen(true);
};
const closeLightbox = () => {
setIsOpen(false);
setCurrentImage(null);
};
useEffect(() => {
const handleKeyPress = (event) => {
if (event.key === 'Escape') {
closeLightbox();
}
};
document.addEventListener('keydown', handleKeyPress);
return () => {
document.removeEventListener('keydown', handleKeyPress);
};
}, []);
return (
<div>
{images.map((image, index) => (
<img
key={index}
src={image}
alt={`Image ${index}`}
onClick={() => openLightbox(index)}
/>
))}
{isOpen && (
<div className="lightbox">
<button className="close-button" onClick={closeLightbox}>
Close
</button>
<img src={images[currentImage]} alt={`Image ${currentImage}`} />
</div>
)}
</div>
);
};
export default Lightbox;
在上面的代码中,我们使用useState钩子来管理isOpen和currentImage状态。isOpen表示Lightbox是否打开,currentImage表示当前显示的图片的索引。
当用户点击图片时,我们调用openLightbox函数来设置currentImage和isOpen的值,从而显示Lightbox。关闭Lightbox时,我们调用closeLightbox函数来将isOpen和currentImage重置为初始值。
为了实现按下Escape键关闭Lightbox的功能,我们使用了useEffect钩子。在组件挂载时,我们添加了一个事件监听器来监听键盘按下事件。当按下Escape键时,我们调用closeLightbox函数来关闭Lightbox。在组件卸载时,我们移除了事件监听器,以避免内存泄漏。
最后,我们在组件的render方法中渲染图片和Lightbox。当Lightbox打开时,我们显示一个包含关闭按钮和当前图片的div。
这是一个基本的Lightbox实现,你可以根据自己的需求进行样式和功能的定制。如果你想要更高级的功能,比如图片缩放、切换动画等,你可以考虑使用第三方库或自己实现。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。
DB・洞见
云+社区技术沙龙[第8期]
DB TALK 技术分享会
云原生正发声
云+社区沙龙online [国产数据库]
Techo Day
技术创作101训练营
DBTalk
DBTalk
领取专属 10元无门槛券
手把手带您无忧上云