Fancybox 3 ajax 加载图片库
Fancybox 3 ajax load image gallery
Fancy box 3 documentation 给出了一些关于其 AJAX 功能的例子。我希望能够单击一个按钮并加载一个“图库”,其中包含从 ajax 响应加载的图像。
我找到的一个示例(this 页上的最后一个示例)需要在隐藏 div 中硬编码图库的图像路径;这很好,但我宁愿通过加载 AJAX.
来减少页面加载时间
我找到了看起来 promising 但我不确定如何在其中实施 ajax 的东西。有什么想法吗?
$.fancybox.open([
{
src : '1_b.jpg',
opts : {
caption : 'First caption'
}
},
{
src : '2_b.jpg',
opts : {
caption : 'Second caption'
}
}
], {
loop : false
});
ajax 画廊中有两个步骤:
- Link 到 ajax 图库。
- 以不同的方式构建您的画廊 url。
Link 到 ajax 图库:
如果你再看文档(ajax部分):
http://fancyapps.com/fancybox/3/docs/#ajax
它表示您可以轻松地 link 到 ajax 图库(不需要 javascript)
使用 data-type="ajax"
和 data-src="my_page.com/path/to/ajax/"
作为您的 ajax 内容
<a data-fancybox data-type="ajax" data-src="my_page.com/path/to/ajax/" href="javascript:;">
AJAX content
</a>
在您创建 link 画廊后,您现在可以继续在另一个 url 中设置 ajax 画廊。
以不同的方式构建您的画廊 url:
在您打算保留所有画廊图片的单独 url (my_page.com/path/to/ajax/
) 中,您只需像正常的 fancybox 画廊一样设置它。
示例:
<div>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7367/16426879675_e32ac817a8_b.jpg" title="Codirosso spazzacamino (Massimo Greco _Foligno)"><img width="160" height="106" src="http://farm8.staticflickr.com/7367/16426879675_e32ac817a8_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm6.staticflickr.com/5612/15344856989_449794889d_b.jpg" title="Morning Twilight (Jose Hamra Images)"><img width="160" height="106" src="http://farm6.staticflickr.com/5612/15344856989_449794889d_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7289/16207238089_0124105172_b.jpg" title=" (Eric Goncalves (cathing up again!))"><img width="160" height="106" src="http://farm8.staticflickr.com/7289/16207238089_0124105172_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm9.staticflickr.com/8568/16388772452_f4d77a92c7_b.jpg" title="Arctic Paradise (Tom Draxler)"><img width="160" height="106" src="http://farm9.staticflickr.com/8568/16388772452_f4d77a92c7_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7308/15783866983_27160395b9_b.jpg" title="Rodeo Dusk (_JonathanMitchellPhotography_)"><img width="160" height="106" src="http://farm8.staticflickr.com/7308/15783866983_27160395b9_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm3.staticflickr.com/2880/10346743894_0cfda8ff7a_b.jpg" title="Les papillons ont du chagrin (JMS')"><img width="160" height="106" src="http://farm3.staticflickr.com/2880/10346743894_0cfda8ff7a_m.jpg" alt="" /></a>
</div>
FancyBox3网站也有ajax请求示例,如果你访问http://fancyapps.com/fancybox/3/, scroll to the part where it says Ajax request, you can see how the developer set up his gallery and how he display his gallery in a different url http://fancyapps.com/fancybox/3/ajax.php?v=1508722146。
原来超级简单:
$(document).ready(function () {
$("#test").on('click', function () {
$.ajax({
type: 'POST',
url: '/neou_cms/test/ajax_resp',
dataType: 'json',
success: function (data) {
$.fancybox.open(data);
}
});
});
});
其中 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"}]
只要您遵循以下语法,您甚至可以添加标题和可选缩略图:
{
src : '1_b.jpg',
opts : {
caption : 'First caption'
}
},
Codeigniter 代码:
$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;
如果您已经在 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
});
});
}
});
}
});
});
最新版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
});
});
}
});
}
});
});
Fancy box 3 documentation 给出了一些关于其 AJAX 功能的例子。我希望能够单击一个按钮并加载一个“图库”,其中包含从 ajax 响应加载的图像。
我找到的一个示例(this 页上的最后一个示例)需要在隐藏 div 中硬编码图库的图像路径;这很好,但我宁愿通过加载 AJAX.
来减少页面加载时间我找到了看起来 promising 但我不确定如何在其中实施 ajax 的东西。有什么想法吗?
$.fancybox.open([
{
src : '1_b.jpg',
opts : {
caption : 'First caption'
}
},
{
src : '2_b.jpg',
opts : {
caption : 'Second caption'
}
}
], {
loop : false
});
ajax 画廊中有两个步骤:
- Link 到 ajax 图库。
- 以不同的方式构建您的画廊 url。
Link 到 ajax 图库:
如果你再看文档(ajax部分):
http://fancyapps.com/fancybox/3/docs/#ajax
它表示您可以轻松地 link 到 ajax 图库(不需要 javascript)
使用 data-type="ajax"
和 data-src="my_page.com/path/to/ajax/"
作为您的 ajax 内容
<a data-fancybox data-type="ajax" data-src="my_page.com/path/to/ajax/" href="javascript:;">
AJAX content
</a>
在您创建 link 画廊后,您现在可以继续在另一个 url 中设置 ajax 画廊。
以不同的方式构建您的画廊 url:
在您打算保留所有画廊图片的单独 url (my_page.com/path/to/ajax/
) 中,您只需像正常的 fancybox 画廊一样设置它。
示例:
<div>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7367/16426879675_e32ac817a8_b.jpg" title="Codirosso spazzacamino (Massimo Greco _Foligno)"><img width="160" height="106" src="http://farm8.staticflickr.com/7367/16426879675_e32ac817a8_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm6.staticflickr.com/5612/15344856989_449794889d_b.jpg" title="Morning Twilight (Jose Hamra Images)"><img width="160" height="106" src="http://farm6.staticflickr.com/5612/15344856989_449794889d_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7289/16207238089_0124105172_b.jpg" title=" (Eric Goncalves (cathing up again!))"><img width="160" height="106" src="http://farm8.staticflickr.com/7289/16207238089_0124105172_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm9.staticflickr.com/8568/16388772452_f4d77a92c7_b.jpg" title="Arctic Paradise (Tom Draxler)"><img width="160" height="106" src="http://farm9.staticflickr.com/8568/16388772452_f4d77a92c7_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm8.staticflickr.com/7308/15783866983_27160395b9_b.jpg" title="Rodeo Dusk (_JonathanMitchellPhotography_)"><img width="160" height="106" src="http://farm8.staticflickr.com/7308/15783866983_27160395b9_m.jpg" alt="" /></a>
<a data-fancybox="ajax-gallery-1" href="http://farm3.staticflickr.com/2880/10346743894_0cfda8ff7a_b.jpg" title="Les papillons ont du chagrin (JMS')"><img width="160" height="106" src="http://farm3.staticflickr.com/2880/10346743894_0cfda8ff7a_m.jpg" alt="" /></a>
</div>
FancyBox3网站也有ajax请求示例,如果你访问http://fancyapps.com/fancybox/3/, scroll to the part where it says Ajax request, you can see how the developer set up his gallery and how he display his gallery in a different url http://fancyapps.com/fancybox/3/ajax.php?v=1508722146。
原来超级简单:
$(document).ready(function () {
$("#test").on('click', function () {
$.ajax({
type: 'POST',
url: '/neou_cms/test/ajax_resp',
dataType: 'json',
success: function (data) {
$.fancybox.open(data);
}
});
});
});
其中 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"}]
只要您遵循以下语法,您甚至可以添加标题和可选缩略图:
{
src : '1_b.jpg',
opts : {
caption : 'First caption'
}
},
Codeigniter 代码:
$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;
如果您已经在 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
});
});
}
});
}
});
});
最新版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
});
});
}
});
}
});
});