lightbox2:如何通过javascript动态添加图像

lightbox 2: how to add dynamically images via javascript

本文关键字:动态 添加 图像 javascript 何通过 lightbox2      更新时间:2023-09-26

我在尝试动态添加图像时遇到了问题,因为lightbox2(由lokesh dakar创建)在文档加载后由现有的html编码图像初始化,并且在第一次加载后不再解析文档。

如果我尝试使用javascript添加新图像(例如,将它们附加在正文中),它们不会添加到lighbox组中。

官方网站中的文档似乎没有描述任何脚本化的方法

有经验的人可以帮我吗?使用jquery的解决方案非常受欢迎,但我也能很好地处理vanillajs。


代码示例:

HTML

<body>
 <div id="container">
  <a href="images/image-2.jpg" data-lightbox="roadtrip">Image #2</a>
  <a href="images/image-3.jpg" data-lightbox="roadtrip">Image #3</a>
  <a href="images/image-4.jpg" data-lightbox="roadtrip">Image #4</a>
 </div>
 <!-- where 'Image #X' = <img src="images/thumb/image-X.jpg>" -->
 <div id="loadmore">load more images</div>
 <script src="path/to/lightbox.js"></script>
 <script>
  /* see below for the script */
 </script>
</body>

javascript

$(function(){
  $('#loadmore').click(function(){
   //ajax request for more images.
   //load them with all the needed properties...
   //then put them into the container:
   var IMG = $('<a href="images/image-10.jpg" data-lightbox="roadtrip">'+
       '<img src="images/small/image-10.jpg">'+
     '</a>');
   //magic here... add IMG to roadtrip lightbox group!!!
   //probably something like lightbox.groups['roadtrip'].add(IMG)
   //but i'm only speculating
   $('#container').append(IMG)
  });
})

在花了几个小时测试和阅读代码后,我想出了这个神奇的代码:

//set album values
IMG = $('<a href="...">')
    .attr('data-lightbox','roadtrip')
    .append('<img src="...">')
//lightbox open:
IMG.click(function(){
    lightbox.start($(this));
    return false;
})

一些有用的提示:

  • 不要使用$(...).data('lightbox','group')设置数据,因为每次单击链接时lightbox都会使用选择器$('a[data-lightbox]')。相反,您应该使用$(...).attr('lightbox','group')

  • lightbox.album是一个不需要处理的临时变量。

要添加现有img标记以单独进行灯箱化(不带库功能),可以使用以下内容:

$('img')
    .wrap(function(index) {
        return '<a href="'+$(this).attr('src')+'" data-lightbox="image-'+index+'"></a>';
    });

只需在插入lightbox.js 之前添加即可

我晚了几年才找到解决方案,但希望它能在未来帮助其他人。

添加图像后,您可以通过调用lightbox.init()重新初始化Lightbox。

例如:

var src = "https://via.placeholder.com/150"
$(`#photo-container`)
.append(`
    <a href="${src}" data-lightbox="album">
        <img src="${src}" width="100">
    </a>
`);
lightbox.init();

确保在脚本前包含lightbox和jQuery