Pikachoose/Fancybox Integration - navigation arrows on the lightbox

后端 未结 2 1422
慢半拍i
慢半拍i 2020-12-07 02:11

I\'m using the Fancybox integration with Pikachoose as explained here: http://www.pikachoose.com/how-to-fancybox/

I\'m trying to get the lightbox to display next and

2条回答
  •  [愿得一人]
    2020-12-07 03:07

    The problem with the method explained in http://www.pikachoose.com/how-to-fancybox/ is that you bind fancybox to the current pikachoose element self.anchor.

    With that approach, there is no way to know what group of images will belong to a fancybox gallery (you would need more than one element sharing the same rel attribute) because there is just a single pikachoose image : every image is displayed toggling dynamically its href and src attributes ( and tags respectively) inside the .pika-stage container.

    As a workaround, you would need to built the fancybox group of elements BEFORE binding your html structure to pikachoose (pikachoose will modify the DOM structure)

    1). So having this html structure :

     
    

    2). Create the fancybox group of elements iterating through each anchor with this script :

    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). Then bind pikachoose to the same selector #pikame. You can use the .end() method to do it over the first decelerated selector without duplicating it ;)

    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
    

    Notice that we used the pikachoose option buildFinished: fancy, which actually will fire the fancybox gallery when we click on the big image.

    4). Here is the function :

      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
      }
    

    Notice that we bound a click event using .on() (requires jQuery v1.7+) to the pikachoose element self.anchor to fire fancybox gallery using the manual method $.fancybox([group]).

    This workaround works equally fine for fancybox v1.3.4 or v2.x. See DEMO using v1.3.4 that seems to work fine even with IE7 ;)

提交回复
热议问题