Я хочу запустить Fancybox (например, версию Fancybox модального окна или светового окна) при загрузке страницы. Я мог бы привязать его к скрытому тегу привязки и запустить событие щелчка этого тега привязки через JavaScript, но я бы предпочел просто запустить Fancybox напрямую и избежать лишнего тега привязки.
Как запустить jQuery Fancybox при загрузке страницы?
Ответы (18)
Fancybox в настоящее время напрямую не поддерживает способ автоматического запуска. Работа, с которой я смог работать, - это создание скрытого тега привязки и запуск его события щелчка. Убедитесь, что ваш вызов для запуска события щелчка включен после включения файлов jQuery и Fancybox JS. Я использовал следующий код:
Этот пример сценария встроен непосредственно в HTML, но его также можно включить в файл JS.
<script type="text/javascript">
$(document).ready(function() {
$("#hidden_link").fancybox().trigger('click');
});
</script>
$(document).ready(LaunchFancyBox());
должно быть $(document).ready(LaunchFancyBox);
. (обратите внимание на отсутствие вызова функции в конце).
- person Adam Luter; 02.02.2010
Я заставил это работать, вызвав эту функцию в готовом документе:
$(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>
Посмотрите изображение ниже:
Другой пример:
<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>
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
});
});
теперь просто активируйте ссылку !!
получил это с главной страницы Fancybox
Лучший способ, который я нашел:
<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
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>
Ответ Алекса отличный. но важно отметить, что это вызывает стиль 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-файла, используя «живое» событие:
Сначала добавьте событие щелчка в реальном времени в ваш будущий динамический якорь:
$('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
Может быть, это поможет ... это использовалось в полноразмерном событии щелчка календаря 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'
}
);
});
Это поможет..
Вы можете разместить такую ссылку (она будет скрыта. Может быть до </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>
JS:
<script type="text/javascript">
$(document).ready(function() {
$("#hidden_link").fancybox().trigger('click');
});
</script>
Используя версию 3.5.7 Fancybox, я смог автоматически запустить его без лишнего Javascript. Просто добавьте ссылку на свою группу Fancybox в качестве якорной ссылки в URL-адресе.
Например, если это ваша разметка:
<a href="foo.jpg" data-fancybox="gallery">Click me</a>
Просто воспользуйтесь следующей ссылкой:
https://example.org/slideshow.php#gallery-1
Это автоматически открывает для меня слайд-шоу при загрузке страницы!
возможно, вы сможете использовать jqmodal, он легкий и простой в использовании. вы можете показать модальное окно, позвонив
$('.box').jqmShow()