使JQuery LightBox插件可以与多个库一起使用

时间:2010-01-12 18:18:46

标签: javascript jquery wordpress lightbox

我正在尝试制作这个jquery插件=> http://leandrovieira.com/projects/jquery/lightbox/ 在同一页面上使用多个画廊。

问题是,每当我点击某个图库中的图片时,我都会从同一页面上的所有图库中获取所有图片。假设我有2张画廊,每张6张照片。如果我点击图库1中的图片,我也会看到图库2中的图片。

我尝试过这样的事情,但是没有成功:

<script type="text/javascript">
    $(function(){
      $('div.gallery-6').each(function() {
        $(this).find('a.lightbox').lightBox();
      });
    });
</script>

不幸的是,它不起作用!!!

该解决方法是什么?

再一次,我想要完成的是能够在他们合适的画廊中查看图片。我不希望所有的照片都被视为一个画廊。

9 个答案:

答案 0 :(得分:8)

只需很少的更改,我就可以在一个页面上使用多个图库。

JQuery

$(function() {
  $('#gallery1 a').lightBox();
  $('#gallery2 a').lightBox();
  ...
  $('#galleryN a').lightBox();   
});

HTML

<div class="gallery" id="gallery1">
<div class="gallery" id="gallery2">
...
<div class="gallery" id="galleryN">

我将样式从id改为了class。

答案 1 :(得分:6)

这是Ben的答案的补丁,对于那些想要使用多个画廊,或者只是将灯箱效果添加到图像的人来说,在<head>...</head>标签中使用它

以下是代码(注意:我更改了$的变量jQuery,对我来说效果更好):

<script type="text/javascript">
    jQuery(function() {
        var boxen = [];
        //find all links w/ rel="lightbox[gallery_name]" or just rel="lightbox" it works both ways
        jQuery('a[rel*=lightbox]').each(function() {
        //push only unique lightbox[gallery_name] into boxen array
        if (jQuery.inArray(jQuery(this).attr('rel'),boxen)) boxen.push(jQuery(this).attr('rel'));
    });
    //for each unique lightbox group, apply the lightBox
    jQuery(boxen).each(function(i,val) { jQuery('a[rel='+val+']').lightBox(); });
    });
</script>

这是混合所有可能用途的示例,它们都可以在同一个html中工作,这里我们有两个画廊,第三个没有名称,只有“灯箱”参考:

<a href="images/image1.jpg" rel="lightbox[gallery1]"><img border="0" height="50" src="images/image1_thumbnail.jpg" width="50" />
<a href="images/image2.jpg" rel="lightbox[gallery1]"><img border="0" height="50" src="images/image2_thumbnail.jpg" width="50" />
<a href="images/image3.jpg" rel="lightbox[gallery2]"><img border="0" height="50" src="images/image3_thumbnail.jpg" width="50" />
<a href="images/image4.jpg" rel="lightbox[gallery2]"><img border="0" height="50" src="images/image4_thumbnail.jpg" width="50" />
<a href="images/image5.jpg" rel="lightbox"><img border="0" height="50" src="images/image5_thumbnail.jpg" width="50" />

我希望这有帮助!

答案 2 :(得分:4)

我是这样做的:

<script type="text/javascript">
    $(function(){
        $('.lightboxGallery').each(function(){
            $('.lightbox', this).lightBox();
        });
    });
</script>

这样你只需将每个图库放在某种容器中,每个容器就会得到一个图像集,例如,下面将创建两个图像集:

<div id="gallery1" class="lightboxGallery">
    <a href="image1.jpg" class="lightbox">Image 1</a><br />
    <a href="image2.jpg" class="lightbox">Image 2</a><br />
    <a href="image3.jpg" class="lightbox">Image 3</a><br />
</div>
<div id="gallery2" class="lightboxGallery">
  <a href="image4.jpg" class="lightbox">Image 4</a><br />
  <a href="image5.jpg" class="lightbox">Image 5</a><br />
  <a href="image6.jpg" class="lightbox">Image 6</a><br />
</div>

您可以使用'a'选择器,但我发现使用'.lightbox'可以提供更大的灵活性。

答案 3 :(得分:1)

或者,您可以执行以下操作,自动连接任何灯箱[在此处插入图库名称]链接,例如标准的lightbox.js功能:

$(function() {
  var boxen = [];

  //find all links w/ rel=lightbox[...
  $('a[rel*=lightbox\\[]').each(function() {

    //push only unique lightbox[gallery_name] into boxen array
    if ($.inArray($(this).attr('rel'),boxen)) boxen.push($(this).attr('rel'));

  });

  //for each unique lightbox group, apply the lightBox
  $(boxen).each(function(i,val) { $('a[rel='+val+']').lightBox(); });

});

答案 4 :(得分:1)

您需要的只是灯箱2,您可以从以下链接获取它。

http://www.huddletogether.com/projects/lightbox2/

<a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
<a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
<a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>

您可以使用“lightbox [roadtrip]”设置不同的图库集,只需使用您想要的图库组名称重命名“roadtrip”,它就会像魔术一样工作。无需编写任何额外的代码

答案 5 :(得分:1)

也许灯箱已经改变,因为给出了其他答案,但我认为这个页面上的答案很好,但后来我发现我可以做到:

    jQuery('.lightbox').each(function(){
            jQuery('a', this).lightBox();
    });

假定HTML结构为:

<div class="lightbox">
  <div class="wrapper">
    <a href="asdasd.jpg"><img src="asdasd.jpg"></a>
    <a href="asdasd2.jpg"><img src="asdasd2.jpg"></a>
  </div>
</div>

我认为不需要包装类,但我的代码包含了其他原因。

答案 6 :(得分:0)

不能说我之前使用过这个特定的插件,但通常你会在链接元素中添加rel=lightbox[foo]。 Foo对于页面上的每个图库都是唯一的。

希望这能让你开始走上正确的道路;否则你可以使用dozens个其他灯箱插件。

答案 7 :(得分:0)

以下是我在原始问题中链接的基本jquery灯箱与多个画廊的关系。没有黑客,或任何东西。工作完美无缺。

我给每个灯箱一个单独的名字:

<script type="text/javascript" charset="utf-8">
$(function() {
    $('a[@rel*=lightboxG1]').lightBox();
    $('a[@rel*=lightboxG2]').lightBox();
});
</script>

然后我的HTML看起来像这样:

<a href="images/image-1.jpg" rel="lightboxG1">image #1</a>
<a href="images/image-2.jpg" rel="lightboxG1">image #2</a>
<a href="images/image-3.jpg" rel="lightboxG1">image #3</a>

<a href="images/image-1.jpg" rel="lightboxG2">image #1</a>
<a href="images/image-2.jpg" rel="lightboxG2">image #2</a>
<a href="images/image-3.jpg" rel="lightboxG2">image #3</a>

瞧,我有2个独立的画廊。

答案 8 :(得分:0)

你也可以在没有JavaScript的情况下使用数据属性。

orderedList

如果图像在页面中混合,也可以使用。

<div id="gallery-1">
    <a href="images/image-1.jpg" data-lightbox="gallery-1" data-title="Gallery 1 Image 1"><img src="images/image-1.jpg"></a>
    <a href="images/image-2.jpg" data-lightbox="gallery-1" data-title="Gallery 1 Image 2"><img src="images/image-2.jpg"></a>
    <a href="images/image-3.jpg" data-lightbox="gallery-1" data-title="Gallery 1 Image 3"><img src="images/image-3.jpg"></a>
</div>
<div id="gallery-2">
    <a href="images/image-4.jpg" data-lightbox="gallery-2" data-title="Gallery 2 Image 1"><img src="images/image-4.jpg"></a>
    <a href="images/image-5.jpg" data-lightbox="gallery-2" data-title="Gallery 2 Image 2"><img src="images/image-5.jpg"></a>
    <a href="images/image-6.jpg" data-lightbox="gallery-2" data-title="Gallery 2 Image 3"><img src="images/image-6.jpg"></a>
</div>
<div id="gallery-3">
    <a href="images/image-7.jpg" data-lightbox="gallery-3" data-title="Gallery 3 Image 1"><img src="images/image-7.jpg"></a>
    <a href="images/image-8.jpg" data-lightbox="gallery-3" data-title="Gallery 3 Image 2"><img src="images/image-8.jpg"></a>
    <a href="images/image-9.jpg" data-lightbox="gallery-3" data-title="Gallery 3 Image 3"><img src="images/image-9.jpg"></a>
</div>
<div id="gallery-4">
    <a href="images/image-10.jpg" data-lightbox="gallery-4" data-title="Gallery 4 Image 1"><img src="images/image-10.jpg"></a>
    <a href="images/image-11.jpg" data-lightbox="gallery-4" data-title="Gallery 4 Image 2"><img src="images/image-11.jpg"></a>
    <a href="images/image-12.jpg" data-lightbox="gallery-4" data-title="Gallery 4 Image 3"><img src="images/image-12.jpg"></a>
</div>