我正在使用Fancybox与Pikachoose的集成,如下所述:http://www.pikachoose.com/how-to-fancybox/
我正在尝试让lightbox显示下一个和上一个箭头,但不是在pikachoose舞台上,我遇到了一些麻烦。我尝试在脚本的fancybox部分添加showNavArrows: true的选项,但不起作用。然后我尝试使用this: {text: {previous: "Previous", next: "Next" }}在pikachoose上显示nav选项,但是我总是得到一个错误,可能我的语法没有放在正确的位置?有人能帮帮忙吗?
这是我使用的代码:
$(document).ready(function () {
var a = function (self) {
self.anchor.fancybox({
transitionIn: elastic,
transitionOut: elastic,
speedIn: 600,
speedOut: 200,
overlayShow: false
});
};
$("#pikame").PikaChoose({
showCaption: false,
buildFinished: a,
autoPlay: false,
transition: [0],
speed: 500,
showCaption: false
});
});发布于 2013-04-17 05:39:40
http://www.pikachoose.com/how-to-fancybox/中解释的方法的问题是,您将fancybox绑定到当前的pikachoose元素self.anchor。
使用这种方法,无法知道哪组图像将属于fancybox图库(您将需要多个元素共享相同的rel属性),因为只有一个pikachoose图像:每个图像在.pika-stage容器中动态切换其href和src属性(分别为<a>和<img>标记)。
作为一种变通方法,您需要在将html结构绑定到pikachoose (pikachoose将修改结构)之前构建fancybox元素组。
1)。所以有了这个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)。使用以下脚本创建遍历每个锚点的fancybox元素组:
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};
});
}); // ready3)。然后将pikachoose绑定到相同的选择器#pikame。您可以使用.end()方法在第一个减速选择器上执行此操作,而无需复制它;)
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注意,我们使用了pikachoose选项buildFinished: fancy,当我们点击大图时,它实际上会触发fancybox图库。
4)。下面是函数:
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
}请注意,我们使用.on() (需要jQuery v1.7+)将一个.on()事件绑定到pikachoose元素self.anchor,以使用手动方法$.fancybox([group])触发fancybox图库。
此解决方法同样适用于fancybox v1.3.4或v2.x。请参阅使用v1.3.4的,该版本即使与IE7一起也能正常工作;)
发布于 2016-01-23 18:41:41
JFK的响应很好,但有一些需要纠正的地方:
如果在Pikachoose中启用了轮播,则使用此方法计算的索引将为您提供一个无效的索引,因为pikachoose将通过在ul中追加现有的li来操作DOM
var pikaindex = $("#pikame").find("li.active").index();解决方案:
function getCurrentIndex(fancyGallery) {
var activeLi = $(""#pikame").find("li.active");
if (activeLi.length != 1) {
console.error('(getCurrentIndex) - only one image must have an active class set by Pikachoose');
return -1;
}
var activeLiHtml0 = activeLi[0];
var activeHref = $(activeLiHtml0).find('img').attr('src'); // do not look for <a> tags, PikaChoose will remove them
if (activeHref === null || activeHref.length == 0) {
console.error('(getCurrentIndex) - can not get href attribute from selected image');
return -1;
}
for (var i=0 ; i<fancyGallery.length ;i++) {
var obj = fancyGallery[i];
if (obj.href.indexOf(activeHref) >= 0){
console.debug('(getCurrentIndex) - found index: ' + i);
return i;
}
}
console.error('(getCurrentIndex) - this href: <' + activeHref + '> was not found in configured table');
return -1;
};https://stackoverflow.com/questions/16026145
复制相似问题