Fancybox принудительно загружает первое изображение (индекс), работает не так, как ожидалось

0

Я использую пользовательские следующие и предыдущие, чтобы пользователь мог перемещаться между несколькими галереями fancybox, что хорошо работает. Однако - при навигации между галереями, по какой-то причине fancybox автоматически выбирает последнее изображение в галерее.

Мне нужно добавить способ заставить fancybox всегда загружать первое изображение галереи при его запуске. По умолчанию индекс IS установлен в 0, что немного запутывает, почему он будет меняться.

Идеи? Вот мой код.

Вот код, с которым я работаю:

var $thisFancyRel = 0;
var $itemsPerPage = 9;
$(".fancybox").fancybox({
    index : 0,
    helpers : {
        title   : {
            type: 'outside'
        },
        thumbs  : {
            width   : 50,
            height  : 50
        }
    },
    afterLoad : function() {
        var $self = $(this.element);
        $thisFancyRel = parseInt($($self).attr("rel"));
    },
    afterShow : function() {
        $button_next = "<div class='gallery__next'>Next</div>";
        $button_prev = "<div class='gallery__prev'>Previous</div>";
        $button_clear = "<div class='clearboth'></div>";
        if($thisFancyRel > 0) {
            if($thisFancyRel == 1) {
                $buttons = $button_next + $button_clear;
            } else if ($thisFancyRel == $itemsPerPage) {
                $buttons = $button_prev + $button_clear;
            } else {
                $buttons = $button_prev + $button_next + $button_clear;
            }
        }
        $(".fancybox-skin").after($buttons);
    },
    beforeClose : function() {
        $thisFancyRel = 0;
    }
});
$(document).on("click", ".gallery__next", function () {
    var $nextFancyRel = $thisFancyRel + 1;
    if($nextFancyRel > 0) {
        var $relName = '.fancybox[rel="' + $nextFancyRel + '"]';
        $.fancybox.close();
        $($relName).trigger('click');
    }
});
$(document).on("click", ".gallery__prev", function () {
    var $prevFancyRel = $thisFancyRel - 1;
    if($prevFancyRel > 0) {
        var $relName = '.fancybox[rel="' + $prevFancyRel + '"]';
        $.fancybox.close();
        $($relName).trigger('click');   
    }
});
  • 1
    вместо этого попробуйте $($relName).eq(0).trigger('click') . Кстати, если вы запускаете новую галерею, вам не нужно закрывать fancybox, чтобы вы могли удалить $.fancybox.close(); (открытие нового экземпляра закроет открытое окно, если оно есть)
  • 0
    Уф. Так облегченно. Работал над этим слишком долго. Работал отлично. Спасибо! (Если хотите, добавьте ваше решение, чтобы я мог его пометить.)
Теги:
indexing
fancybox
fancybox-2

1 ответ

1
Лучший ответ

Параметр index работает, если вы запускаете свою галерею непосредственно из привязки, привязанной к fancybox.

С другой стороны, если вы запускаете свою галерею вручную или используете другой элемент в качестве триггера, то галерея начнется с последнего найденного элемента.

Вы можете использовать метод .eq() для запуска галереи из первого элемента (или любого другого элемента), поэтому попробуйте это в своем коде

$($relName).eq(0).trigger('click')

Вы также можете ознакомиться с этим qaru.site/questions/1104148/... для справки.

BTW, если вы запускаете новую галерею, вам не нужно закрывать fancybox, чтобы вы могли удалить $.fancybox.close(); (открытие нового экземпляра закрывает открытый fancybox, если таковой имеется)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню