Problem z metodą wyjaśnione http://www.pikachoose.com/how-to-fancybox/ jest to, że wiążą fancybox do bieżącego pikachoose elementu self.anchor
.
z tym podejściem, nie ma sposobu, aby wiedzieć, co grupa obrazów będzie należeć do galerii fancybox (będzie trzeba więcej niż jeden element w obrębie tego samego atrybutu rel
), ponieważ istnieje tylko jeden pikachoose obraz: każdy Obraz jest wyświetlany dynamicznie zmieniając odpowiednio jego atrybuty (href
i src
(<a>
i <img>
) wewnątrz kontenera .pika-stage
.
Jako obejście, trzeba by zbudowany grupy fancybox elementów PRZED wiążący swoją strukturę HTML na pikachoose (pikachoose będzie modyfikować strukturę DOM)
1). Tak więc mając tę strukturę html:
<div class="pikachoose">
<ul id="pikame">
<li>
<a title="one" href="image01.jpg" id="single_1"><img alt="" src="thumb01.jpg" /></a>
</li>
<li>
<a title="two" href="image02.jpg" id="single_2"><img alt="" src="thumb02.jpg" /></a>
</li>
<li>
<a title="three" href="image03.jpg" id="single_3"><img alt="" src="thumb03.jpg" /></a>
</li>
</ul>
</div>
2). Utwórz grupę elementów fancyboksa, które przechodzą przez każdą kotwicę za pomocą tego skryptu:
var fancyGallery = []; // fancybox gallery group
$(document).ready(function() {
$("#pikame").find("a").each(function(i){
// buidl fancybox gallery group
fancyGallery[i] = {"href" : this.href, "title" : this.title};
});
}); // ready
3). Następnie przytwierdź pikaczoose do tego samego selektora #pikame
. Można użyć metody .end()
to zrobić w ciągu pierwszego spowolnił selektora nie powielając go;)
var fancyGallery = []; // fancybox gallery group
$(document).ready(function() {
// build fancybox group
$("#pikame").find("a").each(function(i){
// buidl fancybox gallery
fancyGallery[i] = {"href" : this.href, "title" : this.title};
}).end().PikaChoose({
autoPlay : false, // optional
// bind fancybox to big images element after pikachoose is built
buildFinished: fancy
}); // PikaChoose
}); // ready
Zawiadomienie że użyliśmy pikachoose opcję buildFinished: fancy
, która faktycznie będzie ogień galerii fancybox gdy klikamy na wielki obraz.
4). Oto funkcja:
var fancy = function (self) {
// bind click event to big image
self.anchor.on("click", function(e){
// find index of corresponding thumbnail
var pikaindex = $("#pikame").find("li.active").index();
// open fancybox gallery starting from corresponding index
$.fancybox(fancyGallery,{
// fancybox options
"cyclic": true, // optional for fancybox v1.3.4 ONLY, use "loop" for v2.x
"index": pikaindex // start with the corresponding thumb index
});
return false; // prevent default and stop propagation
}); // on click
}
Wskazówka że związany zdarzenie click
korzystając .on()
(wymaga jQuery v1.7 +) do pikachoose elementu self.anchor
ognia fancybox galerię stosując metodę ręcznego $.fancybox([group])
.
To obejście działa równie dobrze w przypadku wersji fancybox v1.3.4 lub v2.x.Zobacz DEMO użyciu v1.3.4, który wydaje się działać prawidłowo nawet z IE7;)
dziękuję bardzo za wyjaśnienia !!! i szczęśliwego Nowego Roku :) –