Zdaję sobie sprawę, że to stare pytanie, ale myślę, że znalazłem na nie dobre rozwiązanie. Problem polega na tym, że fantazyjne pudełko zmienia wartość przepełnienia treści, aby ukryć paski przewijania przeglądarki.
Jak wskazuje Dave Kiss, możemy powstrzymać fantazyjny box przed zrobieniem tego poprzez dodanie następujących parametrów:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
}
});
Ale teraz możemy przewijać stronę główną, patrząc na nasze fantazyjne okno. Jest to lepsze niż przeskakiwanie na górę strony, ale prawdopodobnie nie jest to to, czego naprawdę chcemy.
Możemy zapobiec przewijaniu w odpowiedni sposób, dodając kolejne parametry:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
},
'beforeLoad': function(){
disable_scroll();
},
'afterClose': function(){
enable_scroll();
}
});
I dodaj te funkcje z galambalaz. Zobacz: Jak tymczasowo wyłączyć przewijanie?
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;
}