Fancybox 3 ajax 加载图片库

Ale*_*lex 1 ajax jquery fancybox-3

Fancy box 3文档提供了一些有关其 AJAX 功能的示例。我希望能够单击一个按钮并加载一个“图库”,其中包含从 ajax 响应加载的图像。

我发现的一个例子(本页最后一个需要在隐藏的 div 中对图库的图像路径进行硬编码;这很好,但我宁愿通过使用 AJAX 加载来减少页面加载时间。

我发现了一些看起来很有希望的东西,但我不知道如何在其中实现 ajax。有任何想法吗?

$.fancybox.open([
    {
        src  : '1_b.jpg',
        opts : {
            caption : 'First caption'
        }
    },
    {
        src  : '2_b.jpg',
        opts : {
            caption : 'Second caption'
        }
    }
], {
    loop : false
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

事实证明这非常简单:

$(document).ready(function () {
    $("#test").on('click', function () {
        $.ajax({
            type: 'POST',
            url: '/neou_cms/test/ajax_resp',
            dataType: 'json',
            success: function (data) {
                $.fancybox.open(data);
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

其中 AJAX 响应是:

[{"src":"\/images\/uploads\/projects\/207002523\/m_207002523_1.jpg"},
 {"src":"\/images\/uploads\/projects\/207002523\/m_207002523_2.jpg"},
 {"src":"\/images\/uploads\/projects\/207002523\/m_207002523_3.jpg"}, 
 {"src":"\/images\/uploads\/projects\/207002523\/m_207002523_4.jpg"}]
Run Code Online (Sandbox Code Playgroud)

只要遵循以下语法,您甚至可以添加标题和可选拇指:

    {
        src  : '1_b.jpg',
        opts : {
            caption : 'First caption'
        }
    },
Run Code Online (Sandbox Code Playgroud)

代码点火器代码:

$this->load->model('backend/images_model');
$query = $this->db->get_where('projects', array('id' => '207002523'));
$images = $this->images_model->get_images($query->row()->images);
$output = array();
foreach ($images as $image) {
    $output[] = array('src' => $image['main']);
}
echo json_encode($output);
exit;
Run Code Online (Sandbox Code Playgroud)

如果您在 href 中已有一张图像,并且希望在 fancybox 打开时加载更多图像,您可以执行以下操作:

$(document).ready(function () {
    $("[data-fancybox]").fancybox({
        loop: false,
        onInit: function (instance) {
            $.ajax({
                type: 'POST',
                url: '/neou_cms/test/ajax_resp',
                dataType: 'json',
                success: function (data) {
                    $.each(data, function (index, src) {
                        instance.createGroup({
                            type: 'image',
                            src: src
                        });
                    });
                }
            });
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

对最新版本 fancybox 的一些修正:

$(document).ready(function () {
  $("[data-fancybox]").fancybox({
    loop: false,
    onInit: function (instance) {
      let id_album = $("[data-fancybox]").attr('id');
      $.ajax({
        type: 'POST',
        url: './neou_cms/test/ajax_resp',
        dataType: 'json',
        success: function (data) {
          $.each(data, function (item) {
            instance.addContent({
              'type': 'image',
              'src': item.src
            });
          });
        }
      });
    }
  });
});
Run Code Online (Sandbox Code Playgroud)