jquery backstretch — переход к определенному изображению

#jquery #jquery-backstretch

#jquery #jquery-backstretch

Вопрос:

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

Например, я хотел бы иметь возможность перейти mysite.com/projects/firstproject#3 — и пусть он загрузит страницу как обычно, но начнет с изображения 3, а не с самого начала.

Вот мой базовый код backstretch:

 var[images] = [ '/images/project1/1.jpg',
                '/images/project1/2.jpg',
                '/images/project1/3.jpg'
                '/images/project1/4.jpg'
                '/images/project1/5.jpg'
                ]

$(images).each(function() {
   $('<img/>')[0].src = this; 
});

var index = 0;

$.backstretch(images, {speed: 500});
$('body').data('backstretch').pause();

var identifier = window.location.hash.substring(1) - 1; 
  //this grabs the anchor at the end, and grabs it as "3" instead of "#3"
  //and I need to subtract 1, as backstretch expects the first image id to be 0. 

if (identifier > -1 )
    $('body').data('backstretch').show(identifier);
};
  

Это работает, но работает не очень хорошо. Он показывает первое изображение, загружает остальные в конце, а затем, когда оно завершено, переходит к выбранному изображению. На странице с кучей изображений это может быть довольно большой задержкой.

Есть ли более быстрый / лучший способ сделать это?

Ответ №1:

Вот что в основном работает. Я установил область backstretch скрытой по умолчанию. И затем, как только backstretch загрузит указанное мной изображение, оно снова станет видимым.

CSS:

 <style>
    .backstretch {visibility:hidden;opacity:0}
    .backstretch.vis {visibility:visible;opacity:1}
</style>
  

Код обратного растяжения:

 var identifier = window.location.hash.substring(1) - 1;

if (identifier > 0) {
    $('body').backstretch(images, {speed: 500});
    $('body').data('backstretch').show(identifier);
    $('body').data('backstretch').pause();

    $(window).on("backstretch.after", function (e, identifier, index) {
        $('.backstretch').addClass('vis');
    });
} else {    
    $('body').backstretch(images, {speed: 500});
    $('.backstretch').addClass('vis');
    $('body').data('backstretch').pause();
};
  

Это, конечно, всего лишь фрагмент. Вокруг этого есть весь остальной код (изображения, next / prev и т. Д.), Чтобы заставить его работать.