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


95

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


Если вы зайдете на официальный веб-сайт fancybox ( fancybox.net ), у них появится автоматическое всплывающее окно, поэтому вы можете проверить источник их страницы, чтобы увидеть, как они это сделали (подсказка: не то же самое, что принятый ответ)
Nippysaurus

15
Чтобы сэкономить время для остальных - $ (function () {$ .fancybox ('<div> Измени меня </div>', {padding: 20});});
nikib3ro 03

Ответы:


162

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

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

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

1
просто к сведению: $ (document) .ready (function () {$ ("# hidden_link"). fancybox (). trigger ('click');}); это то же самое, что: function LaunchFancyBox () {$ ("# hidden_link"). fancybox (). trigger ('click'); } $ (документ) .ready (LaunchFancyBox ());
Марк Шультайс,

4
Так и $(document).ready(LaunchFancyBox());должно быть $(document).ready(LaunchFancyBox);. (обратите внимание на отсутствие вызова функции в конце).
Адам Лютер

Я пробовал это, но безуспешно. Мне пришлось загрузить контент через Ajax, после чего я вызываю $ .fancybox ({... передача контента.
giubueno

@Blegger Ваше решение $ ("# hidden_link"). Fancybox (). Trigger ('click'); идеально подходит для меня.
Мукеш

66

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

$(document).ready(function () {
        $.fancybox({
            'width': '40%',
            'height': '40%',
            'autoScale': true,
            'transitionIn': 'fade',
            'transitionOut': 'fade',
            'type': 'iframe',
            'href': 'http://www.example.com'
        });
});

У меня это не сработало, потому что что-то пошло не так с обработкой параметра href. Анимация ожидания показывает вечность.
Boris van Schooten

3
Стоит отметить, что это, похоже, метод, который разработали сами fancybox. Если вы перейдете на веб-сайт fancybox ( fancybox.net ), вы должны увидеть модальное диалоговое окно, сообщающее вам, что «fancybox2 выпущен!» ... если вы посмотрите на источник этой страницы, вы увидите, что они использовали технику, описанную в этом ответе.
Nippysaurus

Это должен быть принятый ответ! Принятое решение работает, но добавление скрытого якоря, по которому вы запускаете событие щелчка, на самом деле не самое чистое, не так ли?
luigi7up

Согласен, использование скрытой ссылки - это взлом. Сделай это правильно.
Jamsi

Очень просто! Спасибо! У меня есть встроенный YouTube с автовоспроизведением. Есть ли способ закрыть лайтбокс, как только видео закончится?
Антонио Алмейда,

12

Это просто:

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

<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>

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


10

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

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

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


Этот ответ работает лучше для меня, когда я хочу, чтобы страница начиналась с всплывающего предупреждения в стиле iOS, а затем могла закрыть ее. Самый популярный ответ, когда я пытался реализовать это, заключался в том, что каждый раз, когда я нажимал fancybox.close, элемент перезагружался, а не уходил. Спасибо!
Натаниэль Флик,

Ваш ответ, сэр, наиболее актуален и на 100% верен. Спасибо.
Шалк Кеун

8

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

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

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


5

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

$("#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


5

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

<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>

Это не удастся, потому что закомментирована закрывающая скобка параметров.
Teekin

¡Чисто и просто! Прекрасно работает. Спасибо!
Каролина

4

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

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>

3

Ответ Алекса отличный. но важно отметить, что это вызывает стиль 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');
});

2

На самом деле мне удалось активировать ссылку 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


1

Возможно, это поможет ... это использовалось в полноразмерном событии щелчка календаря 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;
  }

1

Вы также можете использовать встроенную функцию 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>

1

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

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

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

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


0

Вы можете разместить ссылку вот так (она будет скрыта. Может быть раньше </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');
});

0

HTML:

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

JS:

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

1
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Nic3500 02

-1

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

$('.box').jqmShow() 

Я не думаю, что это работает, потому что это не класс FancyBox
Хосе Базилио

1
Моим дизайнерам нужен внешний вид Fancybox, и я бы предпочел не прилагать усилий, пытаясь реализовать его для jqmodal. Кроме того, мы уже используем Fancybox на сайте, и я не хочу поддерживать два разных варианта реализации световых коробов.
Blegger
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.