96

我想在页面加载时启动一个 Fancybox(例如Fancybox 的模式或灯箱版本)。我可以将它绑定到隐藏的锚标记并通过 JavaScript 触发该锚标记的单击事件,但我宁愿直接启动 Fancybox 并避免额外的锚标记。

4

18 回答 18

165

Fancybox 目前不直接支持自动启动的方式。我能够开始工作的工作是创建一个隐藏的锚标记并触发它的点击事件。确保在包含 jQuery 和 Fancybox JS 文件之后包含触发点击事件的调用。我使用的代码如下:

此示例脚本直接嵌入在 HTML 中,但也可以包含在 JS 文件中。

<script type="text/javascript">
    $(document).ready(function() {
        $("#hidden_link").fancybox().trigger('click');
    });
</script>
于 2009-05-04T17:37:30.933 回答
68

我通过在准备好的文档中调用此函数来使其工作:

$(document).ready(function () {
        $.fancybox({
            'width': '40%',
            'height': '40%',
            'autoScale': true,
            'transitionIn': 'fade',
            'transitionOut': 'fade',
            'type': 'iframe',
            'href': 'http://www.example.com'
        });
});
于 2010-09-06T03:14:46.303 回答
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>

在此处输入图像描述

于 2014-03-29T07:18:30.350 回答
10

Window.load(相对于 document.ready())似乎是Fancybox 2.0 的 JSFiddler onload 演示中使用的技巧:

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

请记住,您可能正在其他地方使用 document.ready(),而 IE9 对两者的加载顺序感到不安。这给您留下了两个选择:将所有内容更改为 window.load 或使用 setTimer()。

于 2012-08-22T19:48:57.193 回答
8

或者在你的 fancybox 设置之后在 JS 文件中使用它:

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

我相信 Fancybox 1.2.1 会在我需要这样做时使用默认选项,否则我的测试会使用默认选项。

于 2009-05-27T21:03:28.473 回答
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 主页得到这个

于 2011-02-28T14:59:45.707 回答
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>
于 2011-03-30T12:55:14.970 回答
4

就我而言,以下可以成功运行。页面加载完毕后,立即弹出灯箱。

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>
于 2010-09-16T16:17:44.503 回答
4

亚历克斯的回答很棒。但需要注意的是,这调用了默认的 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');
});
于 2010-11-11T20:16:32.023 回答
2

实际上,我设法使用“live”事件仅从外部 JS 文件触发了 fancyBox 链接:

首先,在您未来的动态锚点上添加实时点击事件:

$('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 应该出现在onload 上!

高温高压

于 2009-10-14T10:12:26.267 回答
1

也许这会有所帮助...这用于全尺寸的 jQuery 日历单击事件(http://arshaw.com/fullcalendar/)...但它可以更普遍地用于处理 jQuery 启动的fancybox。

  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;
  }
于 2009-11-28T18:51:15.307 回答
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>
于 2011-08-09T15:56:34.157 回答
1

如果你没有按钮可以点击。我的意思是,如果您想在 ajax 响应上打开它,那么它会是这样的:

$.fancybox({
      href: '#ID',
      padding   : 23,
      maxWidth  : 690,
      maxHeight : 345
});
于 2016-03-30T04:47:36.210 回答
1
$(document).ready(function() {
    $.fancybox(
      '<p>Yes. It works <p>',
       {
        'autoDimensions'    : false,
        'width'             : 400,
        'height'            : 200,
        'transitionIn'      : 'none',
        'transitionOut'     : 'none'
       }
    );
});

这会有所帮助..

于 2016-10-07T05:45:37.160 回答
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');
});
于 2014-03-12T09:52:06.207 回答
0

HTML:

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

JS:

<script type="text/javascript">
    $(document).ready(function() {
        $("#hidden_link").fancybox().trigger('click');
    });
</script>
于 2018-08-02T00:54:58.207 回答
0

使用 Fancybox 3.5.7 版,我无需任何额外的 Javascript 即可自动启动它。只需添加对您的 Fancybox“组”的引用作为 URL 中的锚链接。

例如,如果这是您的标记:

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

只需使用以下链接:

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

这会在页面加载时自动为我打开幻灯片!

于 2021-04-28T04:34:25.807 回答
-1

也许你可以使用jqmodal,它轻量级且易于使用。您可以通过调用显示模态框

$('.box').jqmShow() 
于 2009-04-30T14:52:26.387 回答