Bonjour à tous,
Je travaille actuellement sur le portfolio de ma compagne, dont une version test est accessible ici.
Mon problème, donc, se situe sur ce type de page.
Dans cette galerie, il est possible, en cliquant sur une image, d'accéder à une version agrandie de celle-ci (même principe qu'une lightbox). Malheureusement, et de façon étrangement assez erratique (?), j'ai constaté parfois un problème de positionnement vertical de l'image, principalement sur des petits écrans... L'image se retrouve alors vers le bas de l'écran, et non centrée comme prévu.
Mon principal problème est donc, vous l'aurez compris, que je n'arrive pas à reproduire le bug de façon suffisamment systématique, pour identifier et solutionner le problème correctement. J'en appel donc à la bonne volonté de celles/ceux qui voudront bien jeter un oeil sur cet écran/ce code, afin de m'aider à trouver l'origine du problème, et si possible du coup une solution
Merci encore par avance ! [/i][/i][/i][/i]
Je travaille actuellement sur le portfolio de ma compagne, dont une version test est accessible ici.
Mon problème, donc, se situe sur ce type de page.
Dans cette galerie, il est possible, en cliquant sur une image, d'accéder à une version agrandie de celle-ci (même principe qu'une lightbox). Malheureusement, et de façon étrangement assez erratique (?), j'ai constaté parfois un problème de positionnement vertical de l'image, principalement sur des petits écrans... L'image se retrouve alors vers le bas de l'écran, et non centrée comme prévu.
Mon principal problème est donc, vous l'aurez compris, que je n'arrive pas à reproduire le bug de façon suffisamment systématique, pour identifier et solutionner le problème correctement. J'en appel donc à la bonne volonté de celles/ceux qui voudront bien jeter un oeil sur cet écran/ce code, afin de m'aider à trouver l'origine du problème, et si possible du coup une solution
// ZOOM galeries
var zoomgalleries = function() {
$('.gallery-item').on('click', 'a', function(e) {
e.preventDefault();
// On récupère l'index de l'élément cliqué
var selectedItem = $('.gallery-item').index( $(this).closest('.gallery-item') );
// On récupère les url full-sized pour chaque image
var listUrls = [];
$(this).closest('.gallery').children('.gallery-item').each(function() {
var bigUrl = $(this).find('a').attr('href');
listUrls.push(bigUrl);
});
// On récupère les descriptions pour chaque image
var listDesc = [];
$(this).closest('.gallery').children('.gallery-item').each(function() {
var thbDesc = $(this).children('.gallery-thumb').data('thumb-desc');
listDesc.push(thbDesc);
});
// On construit le DOM de la Zoombox...
var ZboxHtml = '<div id="zoombox"> \
<ul class="slideshow"></ul> \
<a href="#" data-zoombox="prev" title="Précédent"></a> \
<a href="#" data-zoombox="next" title="Suivant"></a> \
<a href="#" data-zoombox="close" title="Revenir à la galerie"></a> \
</div>';
$(this).closest('.gallery').before(ZboxHtml);
for(i=0;i<listUrls.length;i++) {
if( listDesc[i] ) {
$('#zoombox').children('ul').append('<li><img src="'+listUrls[i]+'" /><span class="desc">'+listDesc[i]+'</span></li>');
} else {
$('#zoombox').children('ul').append('<li><img src="'+listUrls[i]+'" /></li>');
}
}
// On fixe la largeur du slideshow, et on le positionne selon l'élément cliqué
$('#zoombox').children('ul').css({
'width': (100 * listUrls.length) + '%',
'marginLeft': -(selectedItem * 100)+'%'
}).children('li').css('width', (100 / listUrls.length) + '%');
// Affichage de la navigation en fonction de la position du slideshow
$('[data-zoombox="next"], [data-zoombox="prev"]').hide();
var manageArrows = function() {
var slideshowMargin = parseInt( $('.slideshow').css('marginLeft') );
var slideshowWidth = $('#zoombox').parent().width();
var limitMax = -((slideshowWidth - 10) * (listUrls.length -1));
if( slideshowMargin == 0 ) {
$('[data-zoombox="prev"]').hide();
$('[data-zoombox="next"]').show();
} else if( slideshowMargin == limitMax ) {
$('[data-zoombox="next"]').hide();
$('[data-zoombox="prev"]').show();
} else {
$('[data-zoombox="prev"]').show();
$('[data-zoombox="next"]').show();
}
};
// Centrage vertical des slides
var vAlign = function() {
$('.slideshow').children('li').each(function() {
var slideH = $(this).parent('.slideshow').height();
var imgH = $(this).children('img').height();
var descH = $(this).children('.desc').outerHeight(true) || 0;
var diff = slideH-(imgH+descH);
if( diff > 0 ) {
$(this).css({'paddingTop': (diff/2) + 'px'});
}
});
};
// ...et une fois ce DOM prêt, on affiche
$('#zoombox').find('li').children().css('opacity', 0);
$('#zoombox').parent('.content-gallery').scrollTop(0).addClass('noscroll').children('#zoombox').fadeIn('100', function() {
vAlign();
$(this).find('li').children().animate({'opacity': 1}, 200);
manageArrows();
}).parent('.content-gallery').siblings('.content-footer').not('.folded').addClass('folded').find('.description').slideToggle('fast');
// Comportements
$('#zoombox').on('click', '[data-zoombox="close"]', function(z) {
z.preventDefault();
$(this).closest('#zoombox').parent('.content-gallery').removeClass('noscroll').children('#zoombox').fadeOut('300', function() {
$(this).remove();
}).parent('.content-gallery').siblings('.content-footer.folded').removeClass('folded').find('.description').slideToggle('fast');;
});
var oneatatime = true;
$('#zoombox').on('click', '[data-zoombox="next"]', function(n) {
n.preventDefault();
if( oneatatime ) {
oneatatime = false;
$(this).siblings('.slideshow').animate({
'marginLeft': '-=100%'
}, 600, function() {
vAlign();
manageArrows();
oneatatime = true;
});
}
});
$('#zoombox').on('click', '[data-zoombox="prev"]', function(p) {
p.preventDefault();
if( oneatatime ) {
oneatatime = false;
$(this).siblings('.slideshow').animate({
'marginLeft': '+=100%'
}, 600, function() {
vAlign();
manageArrows();
oneatatime = true;
});
}
});
//
$(window).on('resize', function() { vAlign(); });
});
};
//////////////
// READY! //
//////////////
$(document).ready(function(){
if( $('.gallery-item').length !== 0 ) {
// MASONRY
var $container = $('.gallery');
$container.imagesLoaded(function() {
$container.masonry({
columnWidth: '.grid',
gutter: 0,
itemSelector: '.gallery-item'
});
});
// ZOOM galeries
zoomgalleries();
}
});
Merci encore par avance ! [/i][/i][/i][/i]