Je sais que c'est une vieille question, mais je pense avoir trouvé une bonne solution. Le problème est que la boîte fantaisie modifie la valeur de débordement du corps afin de masquer les barres de défilement du navigateur.
Comme le souligne Dave Kiss, nous pouvons empêcher Fancy Box de faire cela en ajoutant les paramètres suivants:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
}
});
Mais, maintenant, nous pouvons faire défiler la page principale tout en regardant notre fenêtre de fantaisie. C'est mieux que de sauter en haut de la page, mais ce n'est probablement pas ce que nous voulons vraiment.
Nous pouvons empêcher le défilement dans le bon sens en ajoutant les paramètres suivants:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
},
'beforeLoad': function(){
disable_scroll();
},
'afterClose': function(){
enable_scroll();
}
});
Et ajoutez ces fonctions de galambalaz. Voir: Comment désactiver temporairement le défilement?
var keys = [37, 38, 39, 40];
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
function keydown(e) {
for (var i = keys.length; i--;) {
if (e.keyCode === keys[i]) {
preventDefault(e);
return;
}
}
}
function wheel(e) {
preventDefault(e);
}
function disable_scroll() {
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
document.onkeydown = keydown;
}
function enable_scroll() {
if (window.removeEventListener) {
window.removeEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
}