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

StackOverflow https://stackoverflow.com/questions/807271

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Это просто:

Сначала сделайте свой элемент скрытым следующим образом:

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

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

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

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

enter image description here

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

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

enter image description here

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

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

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

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

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

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

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

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

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

получил это от Домашняя страница Фэнсибокса

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

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

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

JQuery:1.4.2

Фэнсибокс: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>

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

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

Сначала добавьте событие живого щелчка на будущую динамическую привязку:

$('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 должен появиться при загрузке!

ХТХ

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

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

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

$.fancybox({
      href: '#ID',
      padding   : 23,
      maxWidth  : 690,
      maxHeight : 345
});
$(document).ready(function() {
    $.fancybox(
      '<p>Yes. It works <p>',
       {
        'autoDimensions'    : false,
        'width'             : 400,
        'height'            : 200,
        'transitionIn'      : 'none',
        'transitionOut'     : 'none'
       }
    );
});

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

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

$('.box').jqmShow() 

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

HTML:

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

ЯС:

<script type="text/javascript">
    $(document).ready(function() {
        $("#hidden_link").fancybox().trigger('click');
    });
</script>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top