我正在尝试构建自己的简单jQuery灯箱库 . 我背后的逻辑如下:首先只显示和创建缩略图 . 这些链接到完整大小的图像 .

<section class="gallery-set">
                <a href="img/about/gallery/a1.1.jpg">
                    <img src="img/about/gallery/thumb1.1.jpg" alt=""
                    height="192" width="383">
                </a>
                <a href="img/about/gallery/a1.jpg">
                    <img src="img/about/gallery/thumb1.jpg" alt=""
                    height="192" width="383">
                </a>
                <a href="img/about/gallery/a2.1.jpg">
                    <img src="img/about/gallery/thumb2.1.jpg" alt=""
                    height="192" width="383">
                </a>
            </section>

因此,当您单击任何这些缩略图时,我会动态创建叠加灯箱和所有全尺寸图像,仅显示链接到您单击的缩略图的图像 . 虽然其他图像也已创建,但现在隐藏了这些图像 .

function lightBox() {

    var gallery = $('.gallery-set'),
        overlay = $('<div/>', {id: 'overlay'});

    overlay.appendTo('body').hide();

    gallery.on('click', 'a', function(event) {
        event.preventDefault();
        var clickedThumb = $(this),
            clickedThumbPath  = $(this).attr('href'),
            clickedImg = $('<img>', {src: clickedThumbPath, alt: 'fullSizeImage', class: 'current'}),
        prevThumbs = clickedThumb.prevAll(),
        nextThumbs = clickedThumb.nextAll();

        prevThumbs.each(function() {
            var prevImg = $('<img>', {src: $(this).attr('href'), class: 'prev non-current'});
            prevImg.appendTo(overlay);
        });
        clickedImg.appendTo(overlay);
        nextThumbs.each(function() {
            var nextImg = $('<img>', {src: $(this).attr('href'), class: 'next non-current'});
            nextImg.appendTo(overlay);
        });

    overlay.show();
    })
.....
.....
}

现在,当您单击第二个缩略图时,jQuery会动态创建所有全尺寸图像,这就是HTML结构的样子:
enter image description here

现在我有了这个结构,我可以通过左右箭头轻松遍历全尺寸图像 . 当前图像被隐藏,下一个图像被显示出来 . 对于这个逻辑,我使用两个类, currentnon-current ,其中第一个类将display设置为block而第二个设置为none . 这段代码在lightbox()函数中:

$(document).on('keyup', function(event) {

        var pressed = event.keyCode || event.which,
            arrow = {left: 37, right: 39};

        switch(pressed) {
            case arrow.left:
                var curr = overlay.find('.current'),
                    prev = curr.prev();
                if(curr.hasClass('current')) {
                    curr.removeClass('current').addClass('non-current');
                } else {
                    curr.addClass('non-current');
                }
                if(prev.hasClass('non-current')) {
                    prev.removeClass('non-current').addClass('current');
                } else {
                    prev.addClass('current');
                }
                break;
            case arrow.right:
                var curr = overlay.find('.current'),
                    next = curr.next();
                curr.removeClass('current').addClass('non-current');
                next.removeClass('non-current').addClass('current');
                break;
        }
    });

    overlay.on('click', function() {
        overlay.hide();
        overlay.find('img').remove();
    });

});

第一次一切正常 . 但是,一旦我关闭灯箱并尝试再次打开它,将打开正确的图像,但箭头功能已消失 . 我不明白为什么 - 因为每次用户点击图库并动态创建事件监听器(箭头)时,我就会动态创建完整大小的图像 .

只是为了记录,我在结束标记之前从HTML文件中调用此lightbox()函数 .

任何想法都非常感激 . 此外,如果有更简单/更好的方法,请告诉我!我不想使用任何插件,因为我认为这非常简单明了 . 或者,我认为这应该是我应该说的简单 .