2016-07-20 11 views
0

Ich habe etwas von einem Assistenten-Workflow mit fancyboxes bekommen sie zu zeigen und von einem zum anderen zu bewegen funktioniert gut. Ich öffne die ersten in etwa so:Fancybox Hintergrund scrollen mit .open()

$('a.fancybox').fancybox(); 

Im html Ich habe einfach einen Anker-Tag mit dem Anker-ID von dem, was ich in der fancybox will.

Das Problem entsteht, wenn ich aus dem ersten Feld mit dem zweiten Feld zu bewegen, die ich wie so nach einer Antwort vom Server öffnen:

$.fancybox.open({ href: '#divIwantAsFancybox' }); 

Das die fancybox ganz gut eröffnet, aber in diesem Fall Die Seite im Hintergrund scrollt wo sie nicht auf der ersten Box war. Ich habe die inline css und html von fancybox untersucht und festgestellt, dass der einzige Unterschied von signifikant (wahrscheinlich) ist, dass bei der Verwendung von .open() der Inhalt, den ich will nicht mehr in einem Div mit Klasse fancybox-overlay gerendert wird. Manuelles Verschieben des Codes in dieses div im Browser macht diese fancybox mehr oder weniger unbrauchbar. Ich bin hier ratlos und habe keine Ahnung, wie man fancybox anweist, die zweite Box zu öffnen, ohne den Hintergrund zu scrollen.

PS: Ich habe versucht, die css hack der Einstellung overflow: hidden in beforeShow und afterClose, und während das für mich auf den Browser funktioniert hat es nicht den gewünschten Effekt auf einem mobilen Browser. Für den Zweck dieser Frage möchte ich mich zunächst an eine Weblösung halten, aber möglicherweise diesen Hack vermeiden, da ich weiß, dass er für mich in mobilen Browsern nicht funktioniert.

Vielen Dank im Voraus.

+0

Für eine bessere Antwort müssen Sie möglicherweise auch Ihren HTML-Code anzeigen: wie Ihre Anker und Ziel-Divs gefüllt sind, usw. Vielleicht müssen Sie nur den gleichen Typ von Anker in einer Fancybox verwenden, der den ersten ausgelöst hat Fancybox – JFK

Antwort

0

Also nach mehreren Stunden Graben, fand ich einige andere Leute mit dem overflow: hidden Trick aber auf dem Körper statt einer der fancybox divs. Whenver Sie $.fancybox() oder $.fancybox.open() aufrufen, können Sie wie so in den Callback-Funktionen übergeben:

$.fancybox({ beforeShow: function() { 
    $('body').css({'overflow':'hidden'}); 
}, afterClose: function() { 
    $('body').css({'overflow':'visible'}); 
}}); 

Wenn jedoch jemand einen besseren Weg weiß, dies zu umgehen, wenden Sie sich bitte Ihre zwei Cent hinzufügen, da dies, meiner Meinung nach ein Fehler mit fancybox. Ich würde erwarten, $.fancybox.open() aufrufen, um die gleiche Weise zu referenzieren, die einen Anker mit $('a.fancybox').fancybox() würde.