问题
Im testing out fancybox, looks quite a nice little library for galleries and loading in content. I've got the following code below kind of working, however I need it to trigger off the gallery as soon as I click on an item with the lightbox class. The code below loads content from gallery.htm into the content div and then when I click on a thumbnail image from my content div it launces fancybox. What I am trying to do is on one click load my dynamic content and launch fancy box, anyone advise me please?
$(document).ready(function(){
$('.lightbox').live('click', function(e){
e.preventDefault();
//var url = $(this).attr('href');
var url = "gallery.htm";
$('#content').load(url, function(data, stat, req){
$("a.lightbox").fancybox();
});
})
});
Thank you
回答1:
Basically you would need two selectors:
1). one to load the gallery thumbnails into the page using the .load()
method, e.g. loadGallery
:
<a href="javascript:;" class="loadGallery">add dynamic gallery thumbnails</a>
2). another to bind elements to fancybox, e.g. lightbox
. All the elements within the file "gallery.htm" should have then such class
like:
<a class="lightbox" rel="gallery1" href="images/01.jpg"><img src="images/01t.jpg" alt="" /></a>
<a class="lightbox" rel="gallery1" href="images/02.jpg"><img src="images/02t.jpg" alt="" /></a>
<a class="lightbox" rel="gallery1" href="images/03.jpg"><img src="images/03t.jpg" alt="" /></a>
Then bind those elements (in your main page) to fancybox with one script and load the gallery thumbnails into the page and fire the fancybox gallery within the same click
, with another like :
$(document).ready(function(){
// bind elements to fancybox
$(".lightbox").fancybox();
// load thumbnails and fire fancybox gallery
$('.loadGallery').on('click', function(e){
e.preventDefault();
var url = "gallery.htm";
$('#content').load(url, function(data, stat, req){
$(".lightbox").eq(0).trigger("click");
}); // load
$(this).remove(); // you may remove the selector loadGallery after loading the thumbnails
}); // on
}); // ready
Notice that we are using .on()
instead of .live() since the second has been deprecated. The .on()
method requires jQuery 1.7+ though.
Also notice that we used .eq(0)
to start the gallery from the first item, otherwise the gallery will start from the last element appended to the document.
UPDATE : See it working here DEMO
回答2:
I would make Aajax request which would return JSON response containing gallery items. Then I would open fancybox manually (e.g. $.fancybox.open( response ); where response would be like [{href: ''},{href:''}])
来源:https://stackoverflow.com/questions/10986953/how-do-i-trigger-fancybox-gallery-with-dynamic-content