【问题标题】:how do I trigger fancybox gallery with dynamic content我如何触发带有动态内容的fancybox画廊
【发布时间】:2012-06-11 20:16:43
【问题描述】:

我正在测试 fancybox,看起来是一个不错的小库,用于画廊和加载内容。我有下面的代码可以正常工作,但是只要我单击带有灯箱类的项目,我就需要它来触发画廊。下面的代码将来自 gallery.htm 的内容加载到内容 div 中,然后当我单击内容 div 中的缩略图时,它会启动 fancybox。我想做的是一键加载我的动态内容并启动花哨的盒子,请有人告诉我吗?

$(document).ready(function(){
$('.lightbox').live('click', function(e){
    e.preventDefault();
    //var url = $(this).attr('href');
    var url = "gallery.htm";
    $('#content').load(url, function(data, stat, req){
        $("a.lightbox").fancybox();
    });
})

});

谢谢

【问题讨论】:

    标签: jquery fancybox fancybox-2


    【解决方案1】:

    基本上你需要两个选择器:

    1)。一种使用.load() 方法将图库缩略图加载到页面中,例如loadGallery:

    <a href="javascript:;" class="loadGallery">add dynamic gallery thumbnails</a>
    

    2)。另一个将元素绑定到fancybox,例如lightbox。文件“gallery.htm”中的所有元素都应该有这样的class,比如:

    <a class="lightbox" rel="gallery1" href="images/01.jpg"><img src="images/01t.jpg" alt="" /></a>
    <a class="lightbox" rel="gallery1" href="images/02.jpg"><img src="images/02t.jpg" alt="" /></a>
    <a class="lightbox" rel="gallery1" href="images/03.jpg"><img src="images/03t.jpg" alt="" /></a>
    

    然后使用一个脚本将这些元素(在您的主页中)绑定到fancybox,并将画廊缩略图加载到页面中并在同一个click 中触发fancybox 画廊,另一个类似:

    $(document).ready(function(){
     // bind elements to fancybox
     $(".lightbox").fancybox();
     // load thumbnails and fire fancybox gallery
     $('.loadGallery').on('click', function(e){
      e.preventDefault();
      var url = "gallery.htm";
      $('#content').load(url, function(data, stat, req){
       $(".lightbox").eq(0).trigger("click");
      }); // load
      $(this).remove(); // you may remove the selector loadGallery after loading the thumbnails
     }); // on
    }); // ready
    

    请注意,我们使用 .on() 而不是 .live(),因为第二个已被弃用。 .on() 方法需要 jQuery 1.7+。

    另外请注意,我们使用.eq(0) 从第一个项目开始画廊,否则画廊将从附加到文档的最后一个元素开始。

    更新:在这里看到它的工作DEMO

    【讨论】:

    • 嗨,JFK,试过这个,但它说请求的内容无法加载。我有一个警报,看看正在加载什么到#content,并且确实图像标签都在他们的正确的 rel 属性。在此先感谢:)
    • 我已经设法让您的代码工作,但它在 FireFox 中不起作用。你能帮我解决这个问题吗?这是链接stackoverflow.com/questions/11000279/…
    • 我认为打开一个新问题不是一个好主意,因为事情可能会变得混乱(我们本可以对这个问题中的所有内容进行排序。)在您的另一个问题中,您使用相同的选择器时我建议你使用两个不同的。
    • 嗨,JFK,抱歉,我以为我在工作中破解了其他代码,直到我解雇了 FF - 一切都搞砸了。在家试过,I.E不工作,FF和Chrome也不行。所以我想我会回到基础并使用这段代码,也在另一个线程上回复,所以我不会浪费任何人的时间。好的,用你的代码重做我的页面,看起来好像内容正在加载到我的页面中,但是当fancybox启动时,它会出现请求的内容无法加载,请重试。
    • 在答案中查看我的更新,我添加了一个 DEMO,以便您可以比较代码。
    【解决方案2】:

    我会发出 Aajax 请求,该请求将返回包含画廊项目的 JSON 响应。然后我会手动打开fancybox(例如 $.fancybox.open( response ); 其中 response 就像 [{href: ''},{href:''}])

    【讨论】:

    • 嗨,Janis,我用 JFK 的解决方案解决了我原来的问题。但是,我遇到了另一个我可能想用于其他用途但需要 json 响应的插件。我知道如何将响应返回为 html,但是如何将它们转换为 json 以与这些插件一起使用?有没有我需要访问的图书馆或其他什么?
    • 如果您的响应是 JSON 编码的数据(例如在 php 中使用 json_encode),那么您可以这样做 - $.ajax({ url: url, dataType: 'json', data: data, success:函数(数据){$.fancybox.open(数据);}});
    • 谢谢,没有意识到有一个像 JSON 编码的库我可以利用。我找到了一个等效的 asp :) - 将尝试弄清楚如何使用它:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多