带有反应图像幻灯片的模态

时间:2021-04-23 13:46:03

标签: javascript reactjs image modal-dialog slideshow

嗨,我正在尝试为下一张图片实现带有幻灯片的模式。我正在使用 unsplash api 来获取图像。

我面临的问题是,每当我尝试单击网格中的随机图像时,它只显示 Modal 中的第一张图像。

这是我设置图像和模态功能的实现。我正在使用 react-modal 包来设置我的 Modal。

imageList = 包含图像数据的对象数组

url = 包含图像 url 的对象。

export default function Images({ imageList, url, id }) {
    const [modalIsOpen, setModalIsOpen] = useState(false);
    const [current, setCurrent] = useState(0);

    const length = imageList.length;

    function openModal() {
        setModalIsOpen(true);
    }
    function closeModal() {
        setModalIsOpen(false);
    }

    const nextSlide = () => {
        setCurrent(current === length - 1 ? 0 : current + 1);
    };

    const prevSlide = () => {
        setCurrent(current === 0 ? length - 1 : current - 1);
    };

    if (!Array.isArray(imageList) || imageList.length <= 0) {
        return null;
    }
    return (
        <div>
            <img onClick={openModal} key={id} src={url.urls.thumb} alt='' />
            <Modal
                ariaHideApp={false}
                closeTimeoutMS={200}
                style={customStyles}
                isOpen={modalIsOpen}
                onRequestClose={closeModal}
                contentLabel='Image modal'
            >
                <AiOutlineArrowLeft
                    className='left-arrow'
                    onClick={prevSlide}
                />
                <AiOutlineArrowRight
                    className='right-arrow'
                    onClick={nextSlide}
                />
                {imageList.map((image, id) => {
                    return (
                        <div
                            className={
                                id === current ? 'slide active' : 'slide'
                            }
                            key={id}
                        >
                            {id === current && (
                                <img
                                    alt=''
                                    className='image'
                                    src={image.urls.small}
                                />
                            )}
                        </div>
                    );
                })}
            </Modal>
        </div>
    );
}

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您应该通过单击 img 来设置 current-image-index。

<img onClick={()=>openModal(id)=} key={id} src={url.urls.thumb} alt='' />

function openModal(id) {
    setCurrent(id);
    setModalIsOpen(true);
}

或使用道具中的 id/index

const [current, setCurrent] = useState(id);

答案 1 :(得分:0)

通过传递图像 id 设置当前

<img onClick={()=>openModal(id)} key={id} src={url.urls.thumb} alt='' />

function openModal(id) {
    setCurrent(id);
    setModalIsOpen(true);
}