I'm using the Backstretch jquery as a slideshow on a page. I'd like to be able to link to individual images on the page (from a blog post, or even from a thumbnail view, for example).
For example, I'd like to be able to go mysite.com/projects/firstproject#3 - and have it load the page as normal, but start on image 3 rather than at the beginning.
Here's my basic backstretch code:
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);
};
This works, but it doesn't work great. It shows the first image, loads the rest in the back, and then when it's complete, moves to the selected image. In a page with a bunch of images, this can be quite a delay.
Is there a faster/better way to do this?
Here's what mostly works. I set the backstretch area to be hidden by default. And then once backstretch has loaded the image I specified, it becomes visible again.
CSS:
<style>
.backstretch {visibility:hidden;opacity:0}
.backstretch.vis {visibility:visible;opacity:1}
</style>
Backstretch code:
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();
};
This, of course, is just a snippet. There's all the rest of the code (images, next/prev, etc) around that to make it work.