【问题标题】:lightgallery does not work with dynamically generated elementslightgallery 不适用于动态生成的元素
【发布时间】:2015-12-15 20:35:06
【问题描述】:

我已经在我的本地站点上实现了 lighgallery 插件...这不适用于 dom 元素...

例如

1.) 将使用 js 创建的 dom 元素附加到 html 代码中..

如果我在 js "<span id='imgcon'><a href="image"><img src="image"></a></span>" 中创建类似这样的东西,并且所有代码都在一个变量中,让我们调用 galleryview (var galleryview) 并且这个变量我附加到 html 文件 <html><head></head><bdy><div class="container"></div></bdy></html> 中的一个 div 并像这样附加来自js文件代码$(".container").append(galleryview);,最后我使用这个$(".imgcon").lightGallery();不起作用......

这里是 jsfiddle demo 不使用 dom

2.) 图像在 html 代码中

我有类似这样的 html 代码 <html><head></head><bdy><div class="container"><span class="imgcont"><a href="image"><img src="image"></a></span></bdy></html> 这工作正常。$(".imgcon").lightGallery();

这里是jsfiddle working demo,没有 dom。

问题:为什么我不能将 dom 与 lightgallery 一起使用?

第一个演示不工作,因为我使用 js dom,第二个演示工作,因为我在 html 文件中使用 html 代码.. 或者我的代码有任何问题..

【问题讨论】:

  • 是的,我写得很快,所以我写了缩写
  • 这是什么?什么意思?
  • 好的,顺便说一句,你明白问题还是我必须解释??
  • 你总是从数组中附加[1]th 图像......所以我不明白你的问题是什么。
  • 数组无关紧要...我想知道为什么第一个代码不适用于 lightgallery?

标签: javascript jquery html css lightgallery


【解决方案1】:

只需将您的 $(".imagecontiner").lightGallery(); 放入 click 处理程序

http://jsfiddle.net/o0y70kv0/1/

上述内容仅适用于第一个动态创建的凝胶。
要使其适用于多个元素:预先创建内存中的可附加元素并分配到每个.lightGallery() 实例

http://jsfiddle.net/o0y70kv0/6/

$(document).ready(function() {
    var imagesarray = [
        "http://www.planwallpaper.com/static/images/Winter-Tiger-Wild-Cat-Images.jpg",
        "http://www.gettyimages.ca/gi-resources/images/Homepage/Category-Creative/UK/UK_Creative_462809583.jpg",
        "http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg",
        "http://i765.photobucket.com/albums/xx291/just-meller/national%20geografic/Birds-national-geographic-6873734-1600-1200.jpg",
        "http://www.gettyimages.com/gi-resources/images/CreativeImages/Hero-527920799.jpg"
    ];

    var hiddenimages = "",
            albumcover;

    $("#appendnewcontainer").click(function() {

        $("<span />", {
            class : "container",
            appendTo : $("#fotoappendarea"),
            append : $("<span />", {
                class : "imagecontiner",
                html : "<a class='dfed' href=" + imagesarray[1] + "><img src='" + imagesarray[1] + "' class='_34'/></a>"
            }).lightGallery()
        });

    });
});

【讨论】:

  • 为什么我应该使用 in ??
  • @Phoenix 以上仅适用于第一个附加,对于多个附加,请稍等片刻以改进我的答案:D
  • 好的,这对我有用,但jsfiddle.net/o0y70kv0/1 这也适用于每个附加项目jsfiddle.net/o0y70kv0/5
  • @Phoenix 如果您附加多个,则第二个、第三个等不可点击 AKA:不会触发图库。将我的扩展答案示例用于多个动态画廊。
  • @Phoenix 哦,比:D
【解决方案2】:

当您生成图库项目后,您需要在项目中使用以下代码

    var $methods = $('#gallery-container');

$methods.lightGallery();
$methods.data('lightGallery').destroy(true);
$methods.lightGallery({
    thumbnail: true,
    animateThumb: true,
    showThumbByDefault: true,
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多