2010-01-24 2 views
9

Ich muss wissen, dass fancybox geöffnet wurde, um zuzulassen oder zu verweigern, eine andere Funktion zu starten.Wie zu bestimmen, wenn fancybox geöffnet ist?

Eingebaute Funktionen Fancybox wie 'onStart' oder 'onClosed' funktioniert nicht.

Ich spreche über Version 1.3.0 RC2

Antwort

10

Die Version, die Sie verwenden, entspricht offenbar nicht der Dokumentation; Ich schaute auf die Quelle und sah, dass die Namen der Optionen sich von denen der Online-Dokumente unterschieden. Getestet habe ich nur folgendes mit 1.3RC2:

$(document).ready(function() { 

    function myStartFunction() { alert('fancy box opened'); } 

    $("a#inline").fancybox({ 
     'onStart': myStartFunction 
    }); 
}); 

Die Option, die Sie suchen sind, ist ‚onStart‘ - der Alarm in myStartFunction geht jedes Mal, wenn ich öffnen Sie eine Box aus. Ich bin mir nicht sicher, wann sie die Option geändert haben, aber Sie können sich die Quelle jeder Version ansehen, die Sie am Ende benutzen, und sehen, wie die Option aufgerufen werden sollte.

EDIT

ich auf v1.2.5 nur doppelt geprüft - die Version, die ich verwenden - und die Rückrufe in der Tat unterschiedlich benannt. callbackOnStart arbeitet mit 1,25 aber, wie gesagt, nicht 1,3

+0

Haha, wenn Sie in der Quelle von http://fancybox.net/dev/130/ sehen können, rufen sie eine 'onStart' und etc von zweiten param. So funktioniert es nicht. Vielen Dank Erik ^^ –

3

Ich bin mir nicht sicher, was Sie von integrierten Funktionen bedeuten. Fancybox hat Callbacks, die benutzerdefinierte Funktionen aufrufen (die Sie selbst erstellen müssen). Like:

function myClose() 
{ 
    alert('close'); 
} 

function myStart() 
{ 
    alert('start'); 
} 

$("a#single_image").fancybox({ 
    'callbackOnClose': myClose, 
    'callbackOnStart': myStart 
// etc, etc.. 
}); 

Alternativ könnten Sie die fancy_content div überprüfen, um zu sehen, ob es etwas nach innen hat. (wenn ja, dann ist fancybox geöffnet).

if ($('#fancy_content:empty').length > 0) 
{ 
    // Is empty 
} 
2

dies für mich zu arbeiten scheint:

 isLoaded : function(){ 
      return $('#fancybox-content').html()!=''; 
     } 
8

Versuchen zu verwenden Methoden

beforeLoad, // Before loading 
afterLoad, // After loading 
beforeShow, // Before changing in current item 
afterShow, // After opening 

Dieser Code funktionieren

$(".fancybox").fancybox({beforeShow:function(){alert('blah');}}); 
+0

Das OP sagt 'Ich spreche über Version 1.3.0 RC2' – JFK

4

Wenn Sie nach einer Möglichkeit suchen, um zu bestimmen, ob fancybox geöffnet ist oder nicht (anstelle eines Ereignisses, das beim Öffnen ausgelöst wird fancybox), dann können Sie ab fancybox v2 die Eigenschaft $.fancybox.isOpen verwenden. Es ist nicht dokumentiert (zumindest habe ich keine Referenz gefunden), aber es funktioniert.

Beispiel:

if(!$.fancybox.isOpen) { 
    $.fancybox.open({ 
     href: '#newsletter-campaign-popup', 
     height: 385, 
     width: 510, 
     type: 'inline' 
    }); 
} 

Das obige Beispiel verhindert, dass eine zweite Öffnung fancybox wenn man bereits geöffnet ist.

1

Wenn Sie mehrere divs haben, dass Sie für fancybox verwenden, folgenden Code könnte besser und universellere Lösung sein:

if ($('.fancybox-opened').length == 0) { 
    //there is no fancybox opened at all 
} 

Beachten Sie auch, dass fancybox Inhalt möglicherweise nicht immer leer sein, auch wenn fancybox geschlossen ist.

12

$.fancybox.isOpen (bool) zeigt an, ob fancybox geöffnet ist.

+0

besser und hübsche Lösung, sollte Antwort sein –

+1

Ja, aber ich fürchte, es funktioniert nur mit Fancybox 2 – tillsanders