2013-01-15 108 views
-1

我有以下的jQuery的文件... 我怎麼能直接訪問直接$ navPrev$ navNext功能在我的內聯腳本或者我想任何事件。例如:如何訪問jquery函數?

$("a").swipe({ 
    //Generic swipe handler for all directions 
     swipe:function(event, direction, distance, duration, fingerCount) { 
      // My code here to move next or previous based on swipe action. 
     ); 
      }, 
}); 

我基本上是添加jquery滑動功能來滾動滑塊。爲此我需要能夠直接訪問下一個和前一個功能。

(function($, undefined) { 

// Gallery object. 

$.Gallery    = function(options, element) { 

    this.$el = $(element); 
    this._init(options); 

}; 

$.Gallery.defaults  = { 
    current  : 0, // index of current item 
    autoplay : false,// slideshow on/off 
    interval : 2000 // time between transitions 
}; 

$.Gallery.prototype  = { 
    _init    : function(options) { 

     this.options  = $.extend(true, {}, $.Gallery.defaults, options); 

     // support for 3d/2d transforms and transitions 
     this.support3d  = Modernizr.csstransforms3d; 
     this.support2d  = Modernizr.csstransforms; 
     this.supportTrans = Modernizr.csstransitions; 

     this.$wrapper  = this.$el.find('.dg-wrapper'); 

     this.$items   = this.$wrapper.children(); 
     this.itemsCount  = this.$items.length; 

     this.$nav   = this.$el.find('nav'); 
     this.$navPrev  = this.$nav.find('.dg-prev'); 
     this.$navNext  = this.$nav.find('.dg-next'); 

     // minimum of 3 items 
     if(this.itemsCount < 3) { 

      this.$nav.remove(); 
      return false; 

     } 

     this.current  = this.options.current; 

     this.isAnim   = false; 

     this.$items.css({ 
      'opacity' : 0, 
      'visibility': 'hidden' 
     }); 

     this._validate(); 

     this._layout(); 

     // load the events 
     this._loadEvents(); 

     // slideshow 
     if(this.options.autoplay) { 

      this._startSlideshow(); 

     } 

    }, 
    _validate   : function() { 

     if(this.options.current < 0 || this.options.current > this.itemsCount - 1) { 

      this.current = 0; 

     } 

    }, 
    _layout    : function() { 

     // current, left and right items 
     this._setItems(); 

     // current item is not changed 
     // left and right one are rotated and translated 
     var leftCSS, rightCSS, currentCSS; 

     if(this.support3d && this.supportTrans) { 

      leftCSS  = { 
       '-webkit-transform' : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
       '-moz-transform' : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
       '-o-transform'  : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
       '-ms-transform'  : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
       'transform'   : 'translateX(-350px) translateZ(-200px) rotateY(45deg)' 
      }; 

      rightCSS = { 
       '-webkit-transform' : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
       '-moz-transform' : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
       '-o-transform'  : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
       '-ms-transform'  : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
       'transform'   : 'translateX(350px) translateZ(-200px) rotateY(-45deg)' 
      }; 

      leftCSS.opacity  = 1; 
      leftCSS.visibility = 'visible'; 
      rightCSS.opacity = 1; 
      rightCSS.visibility = 'visible'; 

     } 
     else if(this.support2d && this.supportTrans) { 

      leftCSS  = { 
       '-webkit-transform' : 'translate(-350px) scale(0.8)', 
       '-moz-transform' : 'translate(-350px) scale(0.8)', 
       '-o-transform'  : 'translate(-350px) scale(0.8)', 
       '-ms-transform'  : 'translate(-350px) scale(0.8)', 
       'transform'   : 'translate(-350px) scale(0.8)' 
      }; 

      rightCSS = { 
       '-webkit-transform' : 'translate(350px) scale(0.8)', 
       '-moz-transform' : 'translate(350px) scale(0.8)', 
       '-o-transform'  : 'translate(350px) scale(0.8)', 
       '-ms-transform'  : 'translate(350px) scale(0.8)', 
       'transform'   : 'translate(350px) scale(0.8)' 
      }; 

      currentCSS = { 
       'z-index'   : 999 
      }; 

      leftCSS.opacity  = 1; 
      leftCSS.visibility = 'visible'; 
      rightCSS.opacity = 1; 
      rightCSS.visibility = 'visible'; 

     } 

     this.$leftItm.css(leftCSS || {}); 
     this.$rightItm.css(rightCSS || {}); 

     this.$currentItm.css(currentCSS || {}).css({ 
      'opacity' : 1, 
      'visibility': 'visible' 
     }).addClass('dg-center'); 

    }, 
    _setItems   : function() { 

     this.$items.removeClass('dg-center'); 

     this.$currentItm = this.$items.eq(this.current); 
     this.$leftItm  = (this.current === 0) ? this.$items.eq(this.itemsCount - 1) : this.$items.eq(this.current - 1); 
     this.$rightItm  = (this.current === this.itemsCount - 1) ? this.$items.eq(0) : this.$items.eq(this.current + 1); 

     if(!this.support3d && this.support2d && this.supportTrans) { 

      this.$items.css('z-index', 1); 
      this.$currentItm.css('z-index', 999); 

     } 

     // next & previous items 
     if(this.itemsCount > 3) { 

      // next item 
      this.$nextItm  = (this.$rightItm.index() === this.itemsCount - 1) ? this.$items.eq(0) : this.$rightItm.next(); 
      this.$nextItm.css(this._getCoordinates('outright')); 

      // previous item 
      this.$prevItm  = (this.$leftItm.index() === 0) ? this.$items.eq(this.itemsCount - 1) : this.$leftItm.prev(); 
      this.$prevItm.css(this._getCoordinates('outleft')); 

     } 

    }, 
    _loadEvents   : function() { 

     var _self = this; 

     this.$navPrev.on('click.gallery', function(event) { 

      if(_self.options.autoplay) { 

       clearTimeout(_self.slideshow); 
       _self.options.autoplay = false; 

      } 

      _self._navigate('prev'); 

      return false; 

     }); 

     this.$navNext.on('click.gallery', function(event) { 

      if(_self.options.autoplay) { 

       clearTimeout(_self.slideshow); 
       _self.options.autoplay = false; 

      } 

      _self._navigate('next'); 
      return false; 

     }); 

     this.$wrapper.on('webkitTransitionEnd.gallery transitionend.gallery OTransitionEnd.gallery', function(event) { 

      _self.$currentItm.addClass('dg-center'); 
      _self.$items.removeClass('dg-transition'); 
      _self.isAnim = false; 

     }); 

    }, 
    _getCoordinates  : function(position) { 

     if(this.support3d && this.supportTrans) { 

      switch(position) { 
       case 'outleft': 
        return { 
         '-webkit-transform' : 'translateX(-450px) translateZ(-300px) rotateY(45deg)', 
         '-moz-transform' : 'translateX(-450px) translateZ(-300px) rotateY(45deg)', 
         '-o-transform'  : 'translateX(-450px) translateZ(-300px) rotateY(45deg)', 
         '-ms-transform'  : 'translateX(-450px) translateZ(-300px) rotateY(45deg)', 
         'transform'   : 'translateX(-450px) translateZ(-300px) rotateY(45deg)', 
         'opacity'   : 0, 
         'visibility'  : 'hidden' 
        }; 
        break; 
       case 'outright': 
        return { 
         '-webkit-transform' : 'translateX(450px) translateZ(-300px) rotateY(-45deg)', 
         '-moz-transform' : 'translateX(450px) translateZ(-300px) rotateY(-45deg)', 
         '-o-transform'  : 'translateX(450px) translateZ(-300px) rotateY(-45deg)', 
         '-ms-transform'  : 'translateX(450px) translateZ(-300px) rotateY(-45deg)', 
         'transform'   : 'translateX(450px) translateZ(-300px) rotateY(-45deg)', 
         'opacity'   : 0, 
         'visibility'  : 'hidden' 
        }; 
        break; 
       case 'left': 
        return { 
         '-webkit-transform' : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
         '-moz-transform' : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
         '-o-transform'  : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
         '-ms-transform'  : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
         'transform'   : 'translateX(-350px) translateZ(-200px) rotateY(45deg)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
       case 'right': 
        return { 
         '-webkit-transform' : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
         '-moz-transform' : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
         '-o-transform'  : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
         '-ms-transform'  : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
         'transform'   : 'translateX(350px) translateZ(-200px) rotateY(-45deg)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
       case 'center': 
        return { 
         '-webkit-transform' : 'translateX(0px) translateZ(0px) rotateY(0deg)', 
         '-moz-transform' : 'translateX(0px) translateZ(0px) rotateY(0deg)', 
         '-o-transform'  : 'translateX(0px) translateZ(0px) rotateY(0deg)', 
         '-ms-transform'  : 'translateX(0px) translateZ(0px) rotateY(0deg)', 
         'transform'   : 'translateX(0px) translateZ(0px) rotateY(0deg)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
      }; 

     } 
     else if(this.support2d && this.supportTrans) { 

      switch(position) { 
       case 'outleft': 
        return { 
         '-webkit-transform' : 'translate(-450px) scale(0.7)', 
         '-moz-transform' : 'translate(-450px) scale(0.7)', 
         '-o-transform'  : 'translate(-450px) scale(0.7)', 
         '-ms-transform'  : 'translate(-450px) scale(0.7)', 
         'transform'   : 'translate(-450px) scale(0.7)', 
         'opacity'   : 0, 
         'visibility'  : 'hidden' 
        }; 
        break; 
       case 'outright': 
        return { 
         '-webkit-transform' : 'translate(450px) scale(0.7)', 
         '-moz-transform' : 'translate(450px) scale(0.7)', 
         '-o-transform'  : 'translate(450px) scale(0.7)', 
         '-ms-transform'  : 'translate(450px) scale(0.7)', 
         'transform'   : 'translate(450px) scale(0.7)', 
         'opacity'   : 0, 
         'visibility'  : 'hidden' 
        }; 
        break; 
       case 'left': 
        return { 
         '-webkit-transform' : 'translate(-350px) scale(0.8)', 
         '-moz-transform' : 'translate(-350px) scale(0.8)', 
         '-o-transform'  : 'translate(-350px) scale(0.8)', 
         '-ms-transform'  : 'translate(-350px) scale(0.8)', 
         'transform'   : 'translate(-350px) scale(0.8)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
       case 'right': 
        return { 
         '-webkit-transform' : 'translate(350px) scale(0.8)', 
         '-moz-transform' : 'translate(350px) scale(0.8)', 
         '-o-transform'  : 'translate(350px) scale(0.8)', 
         '-ms-transform'  : 'translate(350px) scale(0.8)', 
         'transform'   : 'translate(350px) scale(0.8)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
       case 'center': 
        return { 
         '-webkit-transform' : 'translate(0px) scale(1)', 
         '-moz-transform' : 'translate(0px) scale(1)', 
         '-o-transform'  : 'translate(0px) scale(1)', 
         '-ms-transform'  : 'translate(0px) scale(1)', 
         'transform'   : 'translate(0px) scale(1)', 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
      }; 

     } 
     else { 

      switch(position) { 
       case 'outleft' : 
       case 'outright' : 
       case 'left'  : 
       case 'right' : 
        return { 
         'opacity'   : 0, 
         'visibility'  : 'hidden' 
        }; 
        break; 
       case 'center' : 
        return { 
         'opacity'   : 1, 
         'visibility'  : 'visible' 
        }; 
        break; 
      }; 

     } 

    }, 
    _navigate   : function(dir) { 

     if(this.supportTrans && this.isAnim) 
      return false; 

     this.isAnim = true; 

     switch(dir) { 

      case 'next' : 

       this.current = this.$rightItm.index(); 

       // current item moves left 
       this.$currentItm.addClass('dg-transition').css(this._getCoordinates('left')); 

       // right item moves to the center 
       this.$rightItm.addClass('dg-transition').css(this._getCoordinates('center')); 

       // next item moves to the right 
       if(this.$nextItm) { 

        // left item moves out 
        this.$leftItm.addClass('dg-transition').css(this._getCoordinates('outleft')); 

        this.$nextItm.addClass('dg-transition').css(this._getCoordinates('right')); 

       } 
       else { 

        // left item moves right 
        this.$leftItm.addClass('dg-transition').css(this._getCoordinates('right')); 

       } 
       break; 

      case 'prev' : 

       this.current = this.$leftItm.index(); 

       // current item moves right 
       this.$currentItm.addClass('dg-transition').css(this._getCoordinates('right')); 

       // left item moves to the center 
       this.$leftItm.addClass('dg-transition').css(this._getCoordinates('center')); 

       // prev item moves to the left 
       if(this.$prevItm) { 

        // right item moves out 
        this.$rightItm.addClass('dg-transition').css(this._getCoordinates('outright')); 

        this.$prevItm.addClass('dg-transition').css(this._getCoordinates('left')); 

       } 
       else { 

        // right item moves left 
        this.$rightItm.addClass('dg-transition').css(this._getCoordinates('left')); 

       } 
       break; 

     }; 

     this._setItems(); 

     if(!this.supportTrans) 
      this.$currentItm.addClass('dg-center'); 

    }, 
    _startSlideshow  : function() { 

     var _self = this; 

     this.slideshow = setTimeout(function() { 

      _self._navigate('next'); 

      if(_self.options.autoplay) { 

       _self._startSlideshow(); 

      } 

     }, this.options.interval); 

    }, 
    destroy    : function() { 

     this.$navPrev.off('.gallery'); 
     this.$navNext.off('.gallery'); 
     this.$wrapper.off('.gallery'); 

    } 
}; 

var logError   = function(message) { 
    if (this.console) { 
     console.error(message); 
    } 
}; 

$.fn.gallery   = function(options) { 

    if (typeof options === 'string') { 

     var args = Array.prototype.slice.call(arguments, 1); 

     this.each(function() { 

      var instance = $.data(this, 'gallery'); 

      if (!instance) { 
       logError("cannot call methods on gallery prior to initialization; " + 
       "attempted to call method '" + options + "'"); 
       return; 
      } 

      if (!$.isFunction(instance[options]) || options.charAt(0) === "_") { 
       logError("no such method '" + options + "' for gallery instance"); 
       return; 
      } 

      instance[ options ].apply(instance, args); 

     }); 

    } 
    else { 

     this.each(function() { 

      var instance = $.data(this, 'gallery'); 
      if (!instance) { 
       $.data(this, 'gallery', new $.Gallery(options, this)); 
      } 
     }); 

    } 

    return this; 

}; 

})(jQuery); 

這是我的HTML代碼:

<div class="container"> 
     <!-- Codrops top bar --> 
      <!--/ Codrops top bar --> 
    <section id="dg-container" class="dg-container"> 
    <div class="dg-wrapper"> 

     <a href="#"><img src="album1.jpg" alt="image05"></a> 
     <a href="#"><img src="album2.jpg" alt="image06"></a> 
     <a href="#"><img src="album3.jpg" alt="image07"></a> 

    </div> 
       <nav> 
        <span class="dg-prev">&lt;</span> 
        <span class="dg-next">&gt;</span> 
    </nav> 
    </section> 
</div> 

編輯: 下面是如何滑塊正在從HTML頁面

<script type="text/javascript"> 
      $(function() { 
       $me=$('#dg-container').gallery({ 
        autoplay : true 
       }); 
//    console.log($me); 

      }); 
     </script> 
+0

有你設法您的問題在所有的縮小? – Undefined

+0

你可以展示你的代碼,你如何從document.ready調用你的畫廊? – mabus44

+0

添加了關於如何從html頁面調用滑塊的編輯。 – swtweb

回答

0

首先,所謂$navNext$navPrev不是函數,他們只是span元素。

<span class="dg-prev">&lt;</span> 
<span class="dg-next">&gt;</span> 

您可以使用此

$(".dg-prev") 
$(".dg-next") 

直接訪問這些元素。

所以,在你的swipe代碼,調用是這樣的:

$(".dg-prev").click(); 
+0

感謝ATOzTOA, 它工作! – swtweb