I modified the standard Boostrap 3 Carousel to be able to jump to a specific slide, when the url matches #
. It works, but my pager-text
is not upda
Use $('.carousel').carousel(number)
to jump to a specific slide.
From the bootstrap docs
.carousel(number)
Cycles the carousel to a particular frame (0 based, similar to an array).
See this question for more information on jumping to a specific slide using hash values.
Also, your code to jump to a slide will execute before your custom code to update pager-text
is registered, it also wont register as a "slide" because you are not using the built in function to jump to a slide.
Something like this should give you the results you are looking for.
$(document).ready(function() {
//Initiate carousel
$('.carousel').carousel({
interval: false
})
//Event: Update pager-text on slide
$('.carousel').on('slid.bs.carousel', function () {
...
});
//Jump to slide on page load
$('.carousel').carousel(number);
});
Fixed it by updating the pager-text in the if (url.match('#')) {
function. Now I can type www.mydomain.com/gallery-url/#4 and I'm sent to the fourth image, and the pager-text displays 4/total
.
$(document).ready(function() {
var url = document.location.toString();
var totalItems = $('.item').length;
//Initiate carousel
$('.carousel').carousel({
interval: false
})
$('.carousel').on('slid.bs.carousel', function () {
var currentIndex = $('div.active').index() + 1;
//Update pager-text
$('.pager-text').text(''+currentIndex+'/'+totalItems+'');
// Update location based on slide (index is 0-based)
window.location.hash = "#"+ parseInt($('.carousel .carousel-inner .item.active').index()+1);
});
if (url.match('#')) {
// Clear active item
$('.carousel .carousel-inner .item.active').removeClass('active');
// Activate item number #hash
$('.carousel-inner div:nth-child(' + url.split('#')[1] + ')').addClass('active');
//Update pager-text
$('.pager-text').text(''+url.split('#')[1]+'/'+totalItems+'');
}
});