Как запустить 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'
        });
});
ИорданияC
источник
У меня это не сработало, потому что что-то пошло не так с обработкой параметра 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 будет использовать параметры по умолчанию из моего тестирования, когда мне нужно это сделать.

cynge13
источник
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>
arena-ru
источник
Это не удастся, потому что закомментирована закрывающая скобка параметров.
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>
CMen
источник
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() 
Limboy
источник
Я не думаю, что это работает, потому что это не класс FancyBox
Хосе Базилио
1
Моим дизайнерам нужен внешний вид Fancybox, и я бы предпочел не прилагать усилий, пытаясь реализовать его для jqmodal. Кроме того, мы уже используем Fancybox на сайте, и я не хочу поддерживать два разных варианта реализации световых коробов.
Blegger