2010-01-24 1 views
9

Мне нужно знать, что fancybox был открыт, чтобы разрешить или запретить запуск другой функции.Как определить, когда открыт fancybox?

Встроенные функции Fancybox как 'onStart' или 'onClosed' не работают.

Я говорю о версии 1.3.0 RC2

ответ

10

Версия, используемая вами, по-видимому, не соответствует документации; Я посмотрел на источник и увидел, что имена вариантов отличаются от онлайн-документов. Я просто проверял следующее с 1.3RC2:

$(document).ready(function() { 

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

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

Опция вы ищете является «OnStart» - предупреждение в myStartFunction гаснет каждый раз, когда я открываю коробку. Я не уверен, когда они изменили этот параметр, но вы можете посмотреть источник любой версии, которую вы используете внизу, и посмотреть, какую функцию нужно вызывать.

EDIT

Я просто проверил на v1.2.5 - версию я использую - и обратные вызовы действительно названы разные. callbackOnStart работает с 1.25, но, как я уже сказал, не 1,3

+0

Ха-ха, если вы можете видеть в источнике http://fancybox.net/dev/130/, они вызывают «onStart» и т. Д. Из второго параметра. Таким образом, это не сработает. Большое спасибо. Erik ^^ –

3

Я не уверен, что вы имеете в виду встроенных функций. Fancybox имеет обратные вызовы, которые вызывают пользовательские функции (которые вы должны сделать сами). как:

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

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

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

В качестве альтернативы вы можете проверить fancy_content DIV, чтобы увидеть, если он не имеет ничего внутри. (если есть, то fancybox открыт).

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

это, кажется, работает для меня:

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

Попробуйте использовать методы

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

Этот код отлично работает

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

ОП говорит: «Я говорю о версии 1.3.0 RC2' – JFK

4

Если вы ищете способ определить, открыт ли fancybox или нет (вместо события, которое запускается при открытии ing fancybox), то с fancybox v2 вы можете использовать свойство $.fancybox.isOpen. Он не документирован (по крайней мере, я не нашел ссылки), но он работает.

Пример:

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

В приведенном выше примере предотвращает открытие второго FancyBox, если один уже открыт.

1

Если у вас есть несколько Див о том, что вы используете для FancyBox, следующий код может быть лучше и более универсальное решение:

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

Следует также отметить, что содержание FancyBox не может быть всегда пустым, даже если FancyBox закрыт.

12

$.fancybox.isOpen (bool) указывает, открыт ли fancybox.

+0

лучше и красиво, нужно ответить –

+1

Да, но я боюсь, что он работает только с Fancybox 2 – tillsanders