Pikachoose/Fancybox集成 - 轻箱中的导航箭头

6
我正在使用Fancybox集成Pikachoose,如此处所述: http://www.pikachoose.com/how-to-fancybox/ 我尝试让灯箱显示上一张和下一张箭头,但不在pikachoose舞台上,但遇到了一些问题。我试图在脚本的fancybox部分添加选项showNavArrows: true,但它不起作用。然后我尝试在pikachoose上使用nav选项以显示this: {text: {previous: "Previous", next: "Next" }},但我一直收到错误提示,可能是我的语法不正确?请问有谁能帮忙解决吗?
这是我使用的代码:
$(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
    });
});
2个回答

7
http://www.pikachoose.com/how-to-fancybox/中所解释的方法的问题在于将fancybox绑定到当前的pikachoose元素self.anchor
采用这种方法,无法知道哪个图像组将属于fancybox画廊(需要多个具有相同rel属性的元素),因为只有一个pikachoose图像:每个图像都会在.pika-stage容器内动态切换其hrefsrc属性(分别是<a><img>标签)。
为了解决这个问题,在将html结构绑定到pikachoose之前,需要构建fancybox元素组(pikachoose将修改DOM结构)。
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};
  });

}); // ready

3). 然后将 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+)将pikachoose元素self.anchor绑定了一个click事件,以便使用手动方法$.fancybox([group])启动fancybox图库。

这种解决方法同样适用于fancybox v1.3.4或v2.x。请参见DEMO,该示例使用v1.3.4,即使在IE7上也可以正常工作 ;)


0
JFK的回应很好,但有一些需要更正的地方:
如果在Pikachoose中启用了旋转木马,使用此方法计算的索引将会是无效的,因为Pikachoose会通过将现有的
  • 附加到
      来操作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;
      };
      

  • 网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接