Как запустить jQuery Fancybox при загрузке страницы?

Я хочу запустить Fancybox (например, версию Fancybox модального окна или светового окна) при загрузке страницы. Я мог бы привязать его к скрытому тегу привязки и запустить событие щелчка этого тега привязки через JavaScript, но я бы предпочел просто запустить Fancybox напрямую и избежать лишнего тега привязки.


person Blegger    schedule 30.04.2009    source источник
comment
Если вы зайдете на официальный веб-сайт fancybox (fancybox.net), у них появится автоматическое всплывающее окно, чтобы вы могли проверить их страницу. источник, чтобы увидеть, как они это сделали (подсказка: не совпадает с принятым ответом)   -  person Nippysaurus    schedule 09.12.2011
comment
Чтобы сэкономить время для остальных - $ (function () {$ .fancybox ('‹div› Change me ‹/div›', {padding: 20});});   -  person nikib3ro    schedule 03.03.2012


Ответы (18)


Fancybox в настоящее время напрямую не поддерживает способ автоматического запуска. Работа, с которой я смог работать, - это создание скрытого тега привязки и запуск его события щелчка. Убедитесь, что ваш вызов для запуска события щелчка включен после включения файлов jQuery и Fancybox JS. Я использовал следующий код:

Этот пример сценария встроен непосредственно в HTML, но его также можно включить в файл JS.

<script type="text/javascript">
    $(document).ready(function() {
        $("#hidden_link").fancybox().trigger('click');
    });
</script>
person Blegger    schedule 04.05.2009
comment
просто к сведению: $ (document) .ready (function () {$ (# hidden_link) .fancybox (). trigger ('click');}); то же самое, что: function LaunchFancyBox () {$ (# hidden_link) .fancybox (). trigger ('click'); } $ (документ) .ready (LaunchFancyBox ()); - person Mark Schultheiss; 30.10.2009
comment
То же, что $(document).ready(LaunchFancyBox()); должно быть $(document).ready(LaunchFancyBox);. (обратите внимание на отсутствие вызова функции в конце). - person Adam Luter; 02.02.2010
comment
Я пробовал это, но безуспешно. Мне пришлось загрузить контент через Ajax, после чего я вызываю $ .fancybox ({... передавая контент. - person giubueno; 09.03.2012
comment
@Blegger Ваше решение $ (# hidden_link) .fancybox (). Trigger ('click'); идеально подходит для меня. - person Mukesh; 22.02.2014

Я заставил это работать, вызвав эту функцию в готовом документе:

$(document).ready(function () {
        $.fancybox({
            'width': '40%',
            'height': '40%',
            'autoScale': true,
            'transitionIn': 'fade',
            'transitionOut': 'fade',
            'type': 'iframe',
            'href': 'http://www.example.com'
        });
});
person JordanC    schedule 06.09.2010
comment
У меня это не сработало, потому что что-то пошло не так с обработкой параметра href. Анимация ожидания отображается вечно. - person Boris van Schooten; 20.07.2011
comment
Стоит отметить, что это, похоже, метод, который разработчики fancybox разработали сами. Если вы перейдете на веб-сайт fancybox (fancybox.net), вы должны увидеть модальное диалоговое окно, сообщающее, что fancybox2 выпущен! ... если вы посмотрите на источник этой страницы, вы увидите, что они использовали технику, описанную в этом ответе. - person Nippysaurus; 09.12.2011
comment
Это должен быть принятый ответ! Принятое решение работает, но добавление скрытого якоря, по которому вы запускаете событие щелчка, на самом деле не самое чистое, не так ли? - person luigi7up; 14.10.2013
comment
Согласен, использование скрытой ссылки - это взлом. Сделай это правильно. - person Jamsi; 30.10.2014
comment
Очень простой! Спасибо! У меня есть встроенный YouTube с автовоспроизведением. Есть ли способ закрыть лайтбокс, как только видео закончится? - person Antonio Almeida; 12.02.2016

Это просто:

Сначала сделайте свой элемент скрытым, например:

<div id="hidden" style="display:none;">
    Hi this is hidden
</div>

Затем вызовите свой javascript:

<script type="text/javascript">
    $(document).ready(function() {
        $.fancybox("#hidden");
    });
</script>

Посмотрите изображение ниже:

введите описание изображения здесь

Другой пример:

<div id="example2" style="display:none;">
        <img src="http://theinstitute.ieee.org/img/07tiProductsandServicesiStockphoto-1311258460873.jpg" />
    </div>

 <script type="text/javascript">
        $(document).ready(function() {
            $.fancybox("#example2");
        });
    </script>

введите описание изображения здесь

person Hisham Muneer    schedule 29.03.2014

Window.load (в отличие от document.ready ()), похоже, является уловкой, использованной в демонстрациях загрузки JSFiddler для Fancybox 2.0:

$(window).load(function()
{
    $.fancybox("test");
});

Не забывайте, что вы можете использовать document.ready () где-то еще, и IE9 расстраивается из-за порядка загрузки этих двух. Это оставляет вам два варианта: изменить все на window.load или использовать setTimer ().

person Chris S    schedule 22.08.2012
comment
Этот ответ работает лучше для меня, когда я хочу, чтобы страница начиналась с всплывающего окна с предупреждением в стиле iOS, а затем могла закрыть ее. Самый популярный ответ, когда я пытался его реализовать, заключался в том, что каждый раз, когда я нажимал fancybox.close, элемент перезагружался, а не уходил. Спасибо! - person Nathaniel Flick; 07.08.2015
comment
Ваш ответ, сэр, наиболее актуален и на 100% верен. Спасибо. - person Schalk Keun; 31.03.2016

Или используйте это в файле JS после настройки fancybox:

$('#link_id').trigger('click');

Я считаю, что Fancybox 1.2.1 будет использовать параметры по умолчанию из моего тестирования, когда мне нужно это сделать.

person Community    schedule 27.05.2009

почему это еще не один из ответов ?:

$("#manual2").click(function() {
    $.fancybox([
        'http://farm5.static.flickr.com/4044/4286199901_33844563eb.jpg',
        'http://farm3.static.flickr.com/2687/4220681515_cc4f42d6b9.jpg',
        {
            'href'  : 'http://farm5.static.flickr.com/4005/4213562882_851e92f326.jpg',
            'title' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'
        }
    ], {
        'padding'           : 0,
        'transitionIn'      : 'none',
        'transitionOut'     : 'none',
        'type'              : 'image',
        'changeFade'        : 0
    });
});

теперь просто активируйте ссылку !!

получил это с главной страницы Fancybox

person Thomas    schedule 28.02.2011

Лучший способ, который я нашел:

<script type="text/javascript">
    $(document).ready(function() {
        $.fancybox(
             $("#WRAPPER_FOR_hidden_div_with_content_to_show").html(), //fancybox works perfect with hidden divs
             {
                  //fancybox options
             }
        );
    });
</script>
person arena-ru    schedule 30.03.2011
comment
Это не удастся, потому что закомментирована закрывающая скобка параметров. - person Teekin; 12.05.2011
comment
¡Чисто и просто! Прекрасно работает. Спасибо! - person Carolina; 28.12.2012

В моем случае может успешно работать следующее. Когда страница загружается, сразу появляется всплывающее окно.

JQuery: 1.4.2

Fancybox: 1.3.1

<body onload="$('#aLink').trigger('click');">
<a id="aLink" href="http://www.google.com" >Link</a></body>

<script type="text/javascript">
    $(document).ready(function() {

        $("#aLink").fancybox({
            'width'             : '75%',
            'height'            : '75%',
            'autoScale'         : false,
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'type'              : 'iframe'
        });
    });
</script>
person CMen    schedule 16.09.2010

Ответ Алекса отличный. но важно отметить, что это вызывает стиль fancybox по умолчанию. Если у вас есть свои собственные правила, вы должны просто вызвать .trigger, щелкнуть по этой конкретной привязке

$(document).ready(function() {
$("#hidden_link").fancybox({ 
    'padding':          0,
    'cyclic':       true,
    'width':        625,
    'height':       350,
    'padding':      0, 
    'margin':      0, 
    'speedIn':      300,
    'speedOut':     300,
    'transitionIn': 'elastic',
    'transitionOut': 'elastic',
    'easingIn':     'swing',
    'easingOut':    'swing',
    'titleShow' : false
}); 
    $("#hidden_link").trigger('click');
});
person Andrew Scott Kimrey    schedule 11.11.2010

На самом деле мне удалось активировать ссылку fancyBox только из внешнего JS-файла, используя «живое» событие:

Сначала добавьте событие щелчка в реальном времени в ваш будущий динамический якорь:

$('a.pub').live('click', function() {
  $(this).fancybox(... fancybox parameters ...);
})

Затем добавьте якорь к телу:

$('body').append('<a class="iframe pub" href="your-url.html"></a>');

Затем запустите fancyBox, «щелкнув» привязку:

$('a.pub').click();

Ссылка fancyBox "почти" готова. Почему «почти»? Потому что похоже, что вам нужно добавить некоторую задержку, прежде чем запускать второй щелчок, иначе скрипт не будет готов.

Это быстрая и грязная задержка с использованием некоторой анимации на нашем якоре, но она хорошо работает:

$('a.pub').slideDown('fast', function() {
  $('a.pub').click();
});

Итак, ваш fancyBox должен появиться загруженным!

HTH

person Capsule    schedule 14.10.2009

Может быть, это поможет ... это использовалось в полноразмерном событии щелчка календаря jQuery (http://arshaw.com/fullcalendar/) ... но его можно использовать в более общем плане для работы с fancybox, запускаемым jQuery.

  eventClick: function(calEvent, jsEvent, view) {
      jQuery("body").after('<a id="link_'+calEvent.url+'" style="display: hidden;" href="http://thisweekinblackness.com/wp-content/uploads/2009/01/steve-urkel.jpg">Steve</a>');
      jQuery('#link_'+calEvent.url).fancybox(); 
      jQuery('#link_'+calEvent.url).click();
      jQuery('#link_'+calEvent.url).remove();
    return false;
  }
person Leigh    schedule 28.11.2009

Вы также можете использовать встроенную функцию JavaScript setTimeout(), чтобы отложить отображение окна после DOM готов.

<a id="reference-first" href="#reference-first-message">Test the Popup</a>

<div style="display: none;">
    <div id="reference-first-message" style="width:400px;height:100px;overflow:auto;">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis mi eu elit tempor facilisis id et neque. Nulla sit amet sem sapien. Vestibulum imperdiet porta ante ac ornare. Nulla et lorem eu nibh adipiscing ultricies nec at lacus. Cras laoreet ultricies sem, at blandit mi eleifend aliquam. Nunc enim ipsum, vehicula non pretium varius, cursus ac tortor. Vivamus fringilla congue laoreet. Quisque ultrices sodales orci, quis rhoncus justo auctor in. Phasellus dui eros, bibendum eu feugiat ornare, faucibus eu mi. Nunc aliquet tempus sem, id aliquam diam varius ac. Maecenas nisl nunc, molestie vitae eleifend vel, iaculis sed magna. Aenean tempus lacus vitae orci posuere porttitor eget non felis. Donec lectus elit, aliquam nec eleifend sit amet, vestibulum sed nunc.
    </div>
</div>

<script type="text/javascript">
    $(document).ready(function() {
        $("#reference-first").fancybox({
            'titlePosition'         : 'inside',
            'transitionIn'          : 'fade',
            'transitionOut'         : 'fade',
            'overlayColor'          : '#333',
            'overlayOpacity'        : 0.9
        }).trigger("click");

        //launch on load after 5 second delay
        window.setTimeout('$("#reference-first")', 5000);
    });
</script>
person John Kary    schedule 09.08.2011

В случае, если у вас нет кнопки для нажатия. Я имею в виду, что если вы хотите открыть его в ответе ajax, это будет примерно так:

$.fancybox({
      href: '#ID',
      padding   : 23,
      maxWidth  : 690,
      maxHeight : 345
});
person Maha Dev    schedule 30.03.2016

$(document).ready(function() {
    $.fancybox(
      '<p>Yes. It works <p>',
       {
        'autoDimensions'    : false,
        'width'             : 400,
        'height'            : 200,
        'transitionIn'      : 'none',
        'transitionOut'     : 'none'
       }
    );
});

Это поможет..

person Prabhagaran    schedule 07.10.2016

Вы можете разместить такую ​​ссылку (она будет скрыта. Может быть до </body>)

<a id="clickbanner" href="image.jpg" rel="gallery"></a>

И рабочий атрибут rel или класс, подобный этому

$(document).ready(function() {
    $("a[rel=gallery]").fancybox({
        openEffect  : 'elastic',
        closeEffect : 'elastic',
        maxWidth    : 800,
        maxHeight   : 600
    });
});

Просто сделайте это с помощью функции триггера jquery

$( window ).load(function() {
  $("#clickbanner").trigger('click');
});
person nixis    schedule 12.03.2014

HTML:

<a id="hidden_link" href="LinkToImage"></a>

JS:

<script type="text/javascript">
    $(document).ready(function() {
        $("#hidden_link").fancybox().trigger('click');
    });
</script>
person AnasSafi    schedule 02.08.2018
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. - person Nic3500; 02.08.2018

Используя версию 3.5.7 Fancybox, я смог автоматически запустить его без лишнего Javascript. Просто добавьте ссылку на свою группу Fancybox в качестве якорной ссылки в URL-адресе.

Например, если это ваша разметка:

<a href="foo.jpg" data-fancybox="gallery">Click me</a>

Просто воспользуйтесь следующей ссылкой:

https://example.org/slideshow.php#gallery-1

Это автоматически открывает для меня слайд-шоу при загрузке страницы!

person Louis B.    schedule 28.04.2021

возможно, вы сможете использовать jqmodal, он легкий и простой в использовании. вы можете показать модальное окно, позвонив

$('.box').jqmShow() 
person limboy    schedule 30.04.2009
comment
Я не думаю, что это работает, потому что это не класс FancyBox. - person Jose Basilio; 30.04.2009
comment
Моим дизайнерам нужен внешний вид Fancybox, и я бы предпочел не пытаться реализовать его для jqmodal. Кроме того, мы уже используем Fancybox на сайте, и я не хочу поддерживать два разных варианта реализации световых коробов. - person Blegger; 30.04.2009