2010-01-24 28 views

Respuesta

10

La versión que está utilizando aparentemente no coincide con la documentación; Miré la fuente y vi que los nombres de las opciones eran diferentes, los documentos en línea. Acabo de probar lo siguiente con 1.3RC2:

$(document).ready(function() { 

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

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

La opción que está buscando es 'onStart' - la alerta en myStartFunction se apaga cada vez que abro una caja. No estoy seguro de cuándo cambiaron la opción, pero puede ver la fuente de cualquier versión que utilice en la parte inferior y ver cómo se debería llamar a la opción.

EDITAR

acabo de doble registrado en v1.2.5 - la versión que utilizo - y las devoluciones de llamada son de hecho nombrado diferente. callbackOnStart trabaja con 1,25, pero, como ya he dicho, no 1.3

+0

Jaja, si puede ver en la fuente de http://fancybox.net/dev/130/, ellos llaman 'onStart' y etc. del segundo parámetro. De esa forma no funciona. Muchas gracias Erik ^^ –

3

No estoy seguro de lo que quiere decir con funciones incorporadas. Fancybox tiene devoluciones de llamada que requieren funciones definidas por el usuario (que debe hacer usted mismo). Al igual que :

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

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

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

Alternativamente, usted podría comprobar la div fancy_content para ver si tiene algo en su interior. (si lo tiene, entonces fancybox está abierto).

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

esto parece funcionar para mí:

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

Intente utilizar métodos

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

Este trabajo código fina

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

El OP dice 'Estoy hablando de la versión 1.3.0 RC2' – JFK

4

Si está buscando una manera de determinar si fancybox está abierto o no (en lugar de un evento que se dispara al abrir ing fancybox) luego de fancybox v2 puede usar la propiedad $.fancybox.isOpen. No está documentado (al menos no encontré ninguna referencia) pero funciona.

Ejemplo:

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

El ejemplo anterior impide la apertura de una segunda FancyBox si ya está abierta.

1

Si tiene varios divs que está utilizando para FancyBox, siguiente código podría ser mejor y más universal solución:

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

Tenga en cuenta también que el contenido de FancyBox podría no ser siempre vacío, incluso si FancyBox está cerrado.

12

$.fancybox.isOpen (bool) indica si fancybox está abierto.

+0

solución mejor y bonita, debe ser respuesta –

+1

Sí, pero me temo que solo funciona con Fancybox 2 – tillsanders

Cuestiones relacionadas