123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774 |
- /*
- == Page scroll to id ==
- Version: 1.5.8
- Plugin URI: http://manos.malihu.gr/page-scroll-to-id/
- Author: malihu
- Author URI: http://manos.malihu.gr
- License: MIT License (MIT)
- */
- /*
- Copyright 2013 malihu (email: manos@malihu.gr)
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- */
- ;(function($,window,document,undefined){
-
- /* plugin namespace, prefix, default selector(s) */
-
- var pluginNS="mPageScroll2id",
- pluginPfx="mPS2id",
- defaultSelector=".m_PageScroll2id,a[rel~='m_PageScroll2id'],.page-scroll-to-id,a[rel~='page-scroll-to-id'],._ps2id",
-
- /* default options */
-
- defaults={
- /* scroll animation speed in milliseconds: Integer */
- scrollSpeed:1000,
- /* auto-adjust animation speed (according to target element position and window scroll): Boolean */
- autoScrollSpeed:true,
- /* scroll animation easing when page is idle: String */
- scrollEasing:"easeInOutQuint",
- /* scroll animation easing while page is scrolling: String */
- scrollingEasing:"easeOutQuint",
- /* end of page "smooth scrolling" (auto-adjust the scroll-to position when bottom elements are too short): Boolean */
- pageEndSmoothScroll:true,
- /*
- page layout defines scrolling direction: String
- values: "vertical", "horizontal", "auto"
- */
- layout:"vertical",
- /* extra space in pixels for the target element position: Integer */
- offset:0,
- /* highlight the main/default selectors or insert a different set: Boolean, String */
- highlightSelector:false,
- /* class of the clicked element: String */
- clickedClass:pluginPfx+"-clicked",
- /* class of the current target element: String */
- targetClass:pluginPfx+"-target",
- /* class of the highlighted element: String */
- highlightClass:pluginPfx+"-highlight",
- /* force a single highlighted element each time: Boolean */
- forceSingleHighlight:false,
- /* keep element highlighted until next (one element always stays highlighted): boolean */
- keepHighlightUntilNext:false,
- /* highlight elements according to their target and next target position (useful when targets have zero dimensions). Non "auto" layouts only: boolean */
- highlightByNextTarget:false,
- /* disable plugin below [x,y] screen size: boolean, integer, array ([x,y]) */
- disablePluginBelow:false,
- /* enable/disable click events for all selectors */
- clickEvents:true,
- /* append hash to URL/address bar */
- appendHash:false,
- /* user callback functions: fn */
- onStart:function(){},
- onComplete:function(){},
- /* enable/disable the default selector: Boolean */
- defaultSelector:false,
- /* highlight elements now and in the future */
- live:true,
- /* set specific live selector(s): String */
- liveSelector:false
- },
-
- /* vars, constants */
-
- selector,opt,_init,_trigger,_clicked,_target,_to,_axis,_offset,_dataOffset,_totalInstances=0,_liveTimer,_speed,
-
- /*
- ---------------
- methods
- ---------------
- */
-
- methods={
-
- /* plugin initialization method */
-
- init:function(options){
-
- /* extend options, store each option in jquery data */
-
- var options=$.extend(true,{},defaults,options);
-
- $(document).data(pluginPfx,options);
- opt=$(document).data(pluginPfx);
-
- /* check/set jquery (deprecated) selector property if not defined */
- if(!this.selector){
- var selectorClass="__"+pluginPfx;
- this.each(function(){
- var el=$(this);
- if(!el.hasClass(selectorClass)){
- el.addClass(selectorClass);
- }
- });
- this.selector="."+selectorClass;
- }
-
- /* live selector */
-
- if(opt.liveSelector) this.selector+=","+opt.liveSelector;
-
- /* set selector */
-
- selector=(!selector) ? this.selector : selector+","+this.selector;
-
- if(opt.defaultSelector){
- if(typeof $(selector)!=="object" || $(selector).length===0){
- selector=defaultSelector;
- }
- }
-
- /* plugin events */
-
- if(opt.clickEvents){
- $(document)
-
- .undelegate("."+pluginPfx)
-
- .delegate(selector,"click."+pluginPfx,function(e){
- if(functions._isDisabled.call(null)){
- functions._removeClasses.call(null);
- return;
- }
- var $this=$(this),
- href=$this.attr("href"),
- hrefProp=$this.prop("href");
- if(href && href.indexOf("#/")!==-1){
- return;
- }
- functions._reset.call(null);
- _dataOffset=$this.data("ps2id-offset") || 0;
- if(functions._isValid.call(null,href,hrefProp) && functions._findTarget.call(null,href)){
- e.preventDefault();
- _trigger="selector";
- _clicked=$this;
- functions._setClasses.call(null,true);
- functions._scrollTo.call(null);
- }
- });
- }
-
- $(window)
-
- .unbind("."+pluginPfx)
-
- .bind("scroll."+pluginPfx+" resize."+pluginPfx,function(){
- if(functions._isDisabled.call(null)){
- functions._removeClasses.call(null);
- return;
- }
- var targets=$("._"+pluginPfx+"-t");
- targets.each(function(i){
- var t=$(this),id=t.attr("id"),
- h=functions._findHighlight.call(null,id);
- functions._setClasses.call(null,false,t,h);
- if(i==targets.length-1){functions._extendClasses.call(null);}
- });
- });
-
- /* plugin has initialized */
-
- _init=true;
-
- /* setup selectors, target elements, basic plugin classes etc. */
-
- functions._setup.call(null);
-
- /*
- monitor for elements matching the current highlight selector and call plugin setup when found (now and in the future)
- to manually enable/disable: $(document).data("mPS2id").live=boolean
- */
-
- functions._live.call(null);
- },
-
- /* scrollTo method */
-
- scrollTo:function(id,options){
- if(functions._isDisabled.call(null)){
- functions._removeClasses.call(null);
- return;
- }
- if(id && typeof id!=="undefined"){
- functions._isInit.call(null);
- var defaults={
- layout:opt.layout,
- offset:opt.offset,
- clicked:false
- },
- options=$.extend(true,{},defaults,options);
- functions._reset.call(null);
- _axis=options.layout;
- _offset=options.offset;
- id=(id.indexOf("#")!==-1) ? id : "#"+id;
- if(functions._isValid.call(null,id) && functions._findTarget.call(null,id)){
- _trigger="scrollTo";
- _clicked=options.clicked;
- if(_clicked){
- functions._setClasses.call(null,true);
- }
- functions._scrollTo.call(null);
- }
- }
- },
-
- /* destroy method */
-
- destroy:function(){
- $(window).unbind("."+pluginPfx);
- $(document).undelegate("."+pluginPfx).removeData(pluginPfx);
- $("._"+pluginPfx+"-t").removeData(pluginPfx);
- functions._removeClasses.call(null,true);
- }
- },
-
- /*
- ---------------
- functions
- ---------------
- */
-
- functions={
-
- /* checks if screen size ([x,y]) is below the value(s) set in disablePluginBelow option */
-
- _isDisabled:function(){
- var e=window,a="inner",
- val=opt.disablePluginBelow instanceof Array ? [opt.disablePluginBelow[0] || 0,opt.disablePluginBelow[1] || 0] : [opt.disablePluginBelow || 0,0];
- if(!("innerWidth" in window )){
- a="client";
- e=document.documentElement || document.body;
- }
- return e[a+"Width"]<=val[0] || e[a+"Height"]<=val[1];
- },
-
- /* checks if href attribute is valid */
-
- _isValid:function(href,hrefProp){
- if(!href){
- return;
- }
- hrefProp=(!hrefProp) ? href : hrefProp;
- var str=(hrefProp.indexOf("#/")!==-1) ? hrefProp.split("#/")[0] : hrefProp.split("#")[0],
- loc=window.location.toString().split("#")[0];
- return href!=="#" && href.indexOf("#")!==-1 && (str==="" || decodeURIComponent(str)===decodeURIComponent(loc));
- },
-
- /* setup selectors, target elements, basic plugin classes etc. */
-
- _setup:function(){
- var el=functions._highlightSelector(),i=1,tp=0;
- return $(el).each(function(){
- var $this=$(this),href=$this.attr("href"),hrefProp=$this.prop("href");
- if(functions._isValid.call(null,href,hrefProp)){
- var id=(href.indexOf("#/")!==-1) ? href.split("#/")[1] : href.split("#")[1],t=$("#"+id);
- if(t.length>0){
- if(opt.highlightByNextTarget){
- if(t!==tp){
- if(!tp){t.data(pluginPfx,{tn:"0"});}else{tp.data(pluginPfx,{tn:t});}
- tp=t;
- }
- }
- if(!t.hasClass("_"+pluginPfx+"-t")){
- t.addClass("_"+pluginPfx+"-t");
- }
- t.data(pluginPfx,{i:i});
- if(!$this.hasClass("_"+pluginPfx+"-h")){
- $this.addClass("_"+pluginPfx+"-h");
- }
- var h=functions._findHighlight.call(null,id);
- functions._setClasses.call(null,false,t,h);
- _totalInstances=i;
- i++
- if(i==$(el).length){functions._extendClasses.call(null);}
- }
- }
- });
- },
-
- /* returns the highlight selector */
-
- _highlightSelector:function(){
- return (opt.highlightSelector && opt.highlightSelector!=="") ? opt.highlightSelector : selector;
- },
-
- /* finds the target element */
-
- _findTarget:function(str){
- var val=(str.indexOf("#/")!==-1) ? str.split("#/")[1] : str.split("#")[1],
- el=$("#"+val);
- if(el.length<1 || el.css("position")==="fixed"){
- if(val==="top"){
- el=$("body");
- }else{
- return;
- }
- }
- _target=el;
- if(!_axis){
- _axis=opt.layout;
- }
- _offset=functions._setOffset.call(null);
- _to=[(el.offset().top-_offset[0]).toString(),(el.offset().left-_offset[1]).toString()];
- _to[0]=(_to[0]<0) ? 0 : _to[0];
- _to[1]=(_to[1]<0) ? 0 : _to[1];
- return _to;
- },
-
- /* sets the offset value (pixels, objects etc.) */
-
- _setOffset:function(){
- if(!_offset){
- _offset=(opt.offset) ? opt.offset : 0;
- }
- if(_dataOffset){
- _offset=_dataOffset;
- }
- var val,obj,y,x;
- switch(typeof _offset){
- case "object":
- case "string":
- val=[(_offset["y"]) ? _offset["y"] : _offset,(_offset["x"]) ? _offset["x"] : _offset];
- obj=[(val[0] instanceof jQuery) ? val[0] : $(val[0]),(val[1] instanceof jQuery) ? val[1] : $(val[1])];
- if(obj[0].length>0){ // js/jquery object
- y=obj[0].height();
- if(obj[0].css("position")==="fixed"){ // include position for fixed elements
- y+=obj[0][0].offsetTop;
- }
- }else if(!isNaN(parseFloat(val[0])) && isFinite(val[0])){ // numeric string
- y=parseInt(val[0]);
- }else{
- y=0; // non-existing value
- }
- if(obj[1].length>0){ // js/jquery object
- x=obj[1].width();
- if(obj[1].css("position")==="fixed"){ // include position for fixed elements
- x+=obj[1][0].offsetLeft;
- }
- }else if(!isNaN(parseFloat(val[1])) && isFinite(val[1])){ // numeric string
- x=parseInt(val[1]);
- }else{
- x=0; // non-existing value
- }
- break;
- case "function":
- val=_offset.call(null); // function (single value or array)
- if(val instanceof Array){
- y=val[0];
- x=val[1];
- }else{
- y=x=val;
- }
- break;
- default:
- y=x=parseInt(_offset); // number
- }
- return [y,x];
- },
-
- /* finds the element that should be highlighted */
-
- _findHighlight:function(id){
- var wLoc=window.location,loc=wLoc.toString().split("#")[0],locPath=wLoc.pathname;
- return $("._"+pluginPfx+"-h[href='#"+id+"'],._"+pluginPfx+"-h[href='"+loc+"#"+id+"'],._"+pluginPfx+"-h[href='"+locPath+"#"+id+"'],._"+pluginPfx+"-h[href='#/"+id+"'],._"+pluginPfx+"-h[href='"+loc+"#/"+id+"'],._"+pluginPfx+"-h[href='"+locPath+"#/"+id+"']");
- },
-
- /* sets plugin classes */
-
- _setClasses:function(c,t,h){
- var cc=opt.clickedClass,tc=opt.targetClass,hc=opt.highlightClass;
- if(c && cc && cc!==""){
- $("."+cc).removeClass(cc);
- _clicked.addClass(cc);
- }else if(t && tc && tc!=="" && h && hc && hc!==""){
- if(functions._currentTarget.call(null,t)){
- t.addClass(tc);
- h.addClass(hc);
- }else{
- if(!opt.keepHighlightUntilNext || $("."+hc).length>1){
- t.removeClass(tc);
- h.removeClass(hc);
- }
- }
- }
- },
-
- /* extends plugin classes */
-
- _extendClasses:function(){
- var tc=opt.targetClass,hc=opt.highlightClass,
- $tc=$("."+tc),$hc=$("."+hc),ftc=tc+"-first",ltc=tc+"-last",fhc=hc+"-first",lhc=hc+"-last";
- $("._"+pluginPfx+"-t").removeClass(ftc+" "+ltc);
- $("._"+pluginPfx+"-h").removeClass(fhc+" "+lhc);
- if(!opt.forceSingleHighlight){
- $tc.slice(0,1).addClass(ftc).end().slice(-1).addClass(ltc);
- $hc.slice(0,1).addClass(fhc).end().slice(-1).addClass(lhc);
- }else{
- if(opt.keepHighlightUntilNext && $tc.length>1){
- $tc.slice(0,1).removeClass(tc); $hc.slice(0,1).removeClass(hc);
- }else{
- $tc.slice(1).removeClass(tc); $hc.slice(1).removeClass(hc);
- }
- }
- },
-
- /* removes plugin classes */
-
- _removeClasses:function(destroy){
- $("."+opt.clickedClass).removeClass(opt.clickedClass);
- $("."+opt.targetClass).removeClass(opt.targetClass+" "+opt.targetClass+"-first "+opt.targetClass+"-last");
- $("."+opt.highlightClass).removeClass(opt.highlightClass+" "+opt.highlightClass+"-first "+opt.highlightClass+"-last");
- if(destroy){
- $("._"+pluginPfx+"-t").removeClass("_"+pluginPfx+"-t");
- $("._"+pluginPfx+"-h").removeClass("_"+pluginPfx+"-h");
- }
- },
-
- /* checks if target element is in viewport */
-
- _currentTarget:function(t){
- var o=opt["target_"+t.data(pluginPfx).i],
- dataTarget=t.data("ps2id-target"),
- rect=dataTarget && $(dataTarget)[0] ? $(dataTarget)[0].getBoundingClientRect() : t[0].getBoundingClientRect();
- if(typeof o!=="undefined"){
- var y=t.offset().top,x=t.offset().left,
- from=(o.from) ? o.from+y : y,to=(o.to) ? o.to+y : y,
- fromX=(o.fromX) ? o.fromX+x : x,toX=(o.toX) ? o.toX+x : x;
- return(
- rect.top >= to && rect.top <= from &&
- rect.left >= toX && rect.left <= fromX
- );
- }else{
- var wh=$(window).height(),ww=$(window).width(),
- th=dataTarget ? $(dataTarget).height() : t.height(),tw=dataTarget ? $(dataTarget).width() : t.width(),
- base=1+(th/wh),
- top=base,bottom=(th<wh) ? base*(wh/th) : base,
- baseX=1+(tw/ww),
- left=baseX,right=(tw<ww) ? baseX*(ww/tw) : baseX,
- val=[rect.top <= wh/top,rect.bottom >= wh/bottom,rect.left <= ww/left,rect.right >= ww/right];
- if(opt.highlightByNextTarget){
- var tn=t.data(pluginPfx).tn;
- if(tn){
- var rectn=tn[0].getBoundingClientRect();
- if(opt.layout==="vertical"){
- val=[rect.top <= wh/2,rectn.top > wh/2,1,1];
- }else if(opt.layout==="horizontal"){
- val=[1,1,rect.left <= ww/2,rectn.left > ww/2];
- }
- }
- }
- return(val[0] && val[1] && val[2] && val[3]);
- }
- },
-
- /* scrolls the page */
-
- _scrollTo:function(){
- _speed=functions._scrollSpeed.call(null);
- _to=(opt.pageEndSmoothScroll) ? functions._pageEndSmoothScroll.call(null) : _to;
- var _scrollable=$("html,body"),
- speed=(opt.autoScrollSpeed) ? functions._autoScrollSpeed.call(null) : _speed,
- easing=(_scrollable.is(":animated")) ? opt.scrollingEasing : opt.scrollEasing,
- _t=$(window).scrollTop(),_l=$(window).scrollLeft();
- switch(_axis){
- case "horizontal":
- if(_l!=_to[1]){
- functions._callbacks.call(null,"onStart");
- _scrollable.stop().animate({scrollLeft:_to[1]},speed,easing).promise().then(function(){
- functions._callbacks.call(null,"onComplete");
- });
- }
- break;
- case "auto":
- if(_t!=_to[0] || _l!=_to[1]){
- functions._callbacks.call(null,"onStart");
- if(navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)){ // mobile fix
- var left;
- _scrollable.stop().animate({pageYOffset:_to[0],pageXOffset:_to[1]},{
- duration:speed,
- easing:easing,
- step:function(now,fx){
- if(fx.prop=='pageXOffset'){
- left=now;
- }else if(fx.prop=='pageYOffset'){
- window.scrollTo(left,now);
- }
- }
- }).promise().then(function(){
- functions._callbacks.call(null,"onComplete");
- });
- }else{
- _scrollable.stop().animate({scrollTop:_to[0],scrollLeft:_to[1]},speed,easing).promise().then(function(){
- functions._callbacks.call(null,"onComplete");
- });
- }
- }
- break;
- default:
- if(_t!=_to[0]){
- functions._callbacks.call(null,"onStart");
- _scrollable.stop().animate({scrollTop:_to[0]},speed,easing).promise().then(function(){
- functions._callbacks.call(null,"onComplete");
- });
- }
- }
- },
-
- /* sets end of page "smooth scrolling" position */
-
- _pageEndSmoothScroll:function(){
- var _dh=$(document).height(),_dw=$(document).width(),
- _wh=$(window).height(),_ww=$(window).width();
- return [((_dh-_to[0])<_wh) ? _dh-_wh : _to[0],((_dw-_to[1])<_ww) ? _dw-_ww : _to[1]];
- },
-
- /* sets animation speed (link-specific speed via ps2id-speed-VALUE class on link or link's parent) */
-
- _scrollSpeed:function(){
- var speed=opt.scrollSpeed;
- if(_clicked && _clicked.length){
- _clicked.add(_clicked.parent()).each(function(){
- var $this=$(this);
- if($this.attr("class")){
- var clickedClasses=$this.attr("class").split(" ");
- for(var index in clickedClasses){
- if(String(clickedClasses[index]).match(/^ps2id-speed-\d+$/)){
- speed=clickedClasses[index].split("ps2id-speed-")[1];
- break;
- }
- }
- }
- });
- }
- return parseInt(speed);
- },
-
- /* sets the auto-adjusted animation speed */
-
- _autoScrollSpeed:function(){
- var _t=$(window).scrollTop(),_l=$(window).scrollLeft(),
- _h=$(document).height(),_w=$(document).width(),
- val=[
- _speed+((_speed*(Math.floor((Math.abs(_to[0]-_t)/_h)*100)))/100),
- _speed+((_speed*(Math.floor((Math.abs(_to[1]-_l)/_w)*100)))/100)
- ];
- return Math.max.apply(Math,val);
- },
-
- /* user callback functions */
-
- _callbacks:function(c){
- if(!opt){
- return;
- }
- this[pluginPfx]={
- trigger:_trigger,clicked:_clicked,target:_target,scrollTo:{y:_to[0],x:_to[1]}
- };
- switch(c){
- case "onStart":
- //append hash to URL/address bar
- if(opt.appendHash && window.history && window.history.pushState && _clicked && _clicked.length){
- var h="#"+_clicked.attr("href").split("#")[1];
- if(h!==window.location.hash) history.pushState("","",h);
- }
- opt.onStart.call(null,this[pluginPfx]);
- break;
- case "onComplete":
- opt.onComplete.call(null,this[pluginPfx]);
- break;
- }
- },
-
- /* resets/clears vars and constants */
-
- _reset:function(){
- _axis=_offset=_dataOffset=false;
- },
-
- /* checks if plugin has initialized */
-
- _isInit:function(){
- if(!_init){
- methods.init.apply(this);
- }
- },
-
- /* live fn */
-
- _live:function(){
- _liveTimer=setTimeout(function(){
- if(opt.live){
- if($(functions._highlightSelector()).length!==_totalInstances){
- functions._setup.call(null);
- }
- }else{
- if(_liveTimer){clearTimeout(_liveTimer);}
- }
- functions._live.call(null);
- },1000);
- },
-
- /* extends jquery with custom easings (as jquery ui) */
-
- _easing:function(){
- $.easing.easeInQuad=$.easing.easeInQuad || function(x){
- return x*x;
- };
- $.easing.easeOutQuad=$.easing.easeOutQuad || function(x){
- return 1-(1-x)*(1-x);
- };
- $.easing.easeInOutQuad=$.easing.easeInOutQuad || function(x){
- return x<0.5 ? 2*x*x : 1-Math.pow(-2*x+2,2)/2;
- };
- $.easing.easeInCubic=$.easing.easeInCubic || function(x){
- return x*x*x;
- };
- $.easing.easeOutCubic=$.easing.easeOutCubic || function(x){
- return 1-Math.pow(1-x,3);
- };
- $.easing.easeInOutCubic=$.easing.easeInOutCubic || function(x){
- return x<0.5 ? 4*x*x*x : 1-Math.pow(-2*x+2,3)/2;
- };
- $.easing.easeInQuart=$.easing.easeInQuart || function(x){
- return x*x*x*x;
- };
- $.easing.easeOutQuart=$.easing.easeOutQuart || function(x){
- return 1-Math.pow(1-x,4);
- };
- $.easing.easeInOutQuart=$.easing.easeInOutQuart || function(x){
- return x<0.5 ? 8*x*x*x*x : 1-Math.pow(-2*x+2,4)/2;
- };
- $.easing.easeInQuint=$.easing.easeInQuint || function(x){
- return x*x*x*x*x;
- };
- $.easing.easeOutQuint=$.easing.easeOutQuint || function(x){
- return 1-Math.pow(1-x,5);
- };
- $.easing.easeInOutQuint=$.easing.easeInOutQuint || function(x){
- return x<0.5 ? 16*x*x*x*x*x : 1-Math.pow(-2*x+2,5)/2;
- };
- $.easing.easeInExpo=$.easing.easeInExpo || function(x){
- return x===0 ? 0 : Math.pow(2,10*x-10);
- };
- $.easing.easeOutExpo=$.easing.easeOutExpo || function(x){
- return x===1 ? 1 : 1-Math.pow(2,-10*x);
- };
- $.easing.easeInOutExpo=$.easing.easeInOutExpo || function(x){
- return x===0 ? 0 : x===1 ? 1 : x<0.5 ? Math.pow(2,20*x-10)/2 : (2-Math.pow(2,-20*x+10))/2;
- };
- $.easing.easeInSine=$.easing.easeInSine || function(x){
- return 1-Math.cos(x*Math.PI/2);
- };
- $.easing.easeOutSine=$.easing.easeOutSine || function(x){
- return Math.sin(x*Math.PI/2);
- };
- $.easing.easeInOutSine=$.easing.easeInOutSine || function(x){
- return -(Math.cos(Math.PI*x)-1)/2;
- };
- $.easing.easeInCirc=$.easing.easeInCirc || function(x){
- return 1-Math.sqrt(1-Math.pow(x,2));
- };
- $.easing.easeOutCirc=$.easing.easeOutCirc || function(x){
- return Math.sqrt(1-Math.pow(x-1,2));
- };
- $.easing.easeInOutCirc=$.easing.easeInOutCirc || function(x){
- return x<0.5 ? (1-Math.sqrt(1-Math.pow(2*x,2)))/2 : (Math.sqrt(1-Math.pow(-2*x+2,2))+1)/2;
- };
- $.easing.easeInElastic=$.easing.easeInElastic || function(x){
- return x===0 ? 0 : x===1 ? 1 : -Math.pow(2,10*x-10)*Math.sin((x*10-10.75)*((2*Math.PI)/3));
- };
- $.easing.easeOutElastic=$.easing.easeOutElastic || function(x){
- return x===0 ? 0 : x===1 ? 1 : Math.pow(2,-10*x)*Math.sin((x*10-0.75)*((2*Math.PI)/3))+1;
- };
- $.easing.easeInOutElastic=$.easing.easeInOutElastic || function(x){
- return x===0 ? 0 : x===1 ? 1 : x<0.5 ? -(Math.pow(2,20*x-10)*Math.sin((20*x-11.125)*((2*Math.PI)/4.5)))/2 : Math.pow(2,-20*x+10)*Math.sin((20*x-11.125)*((2*Math.PI)/4.5))/2+1;
- };
- $.easing.easeInBack=$.easing.easeInBack || function(x){
- return (1.70158+1)*x*x*x-1.70158*x*x;
- };
- $.easing.easeOutBack=$.easing.easeOutBack || function(x){
- return 1+(1.70158+1)*Math.pow(x-1,3)+1.70158*Math.pow(x-1,2);
- };
- $.easing.easeInOutBack=$.easing.easeInOutBack || function(x){
- return x<0.5 ? (Math.pow(2*x,2)*(((1.70158*1.525)+1)*2*x-(1.70158*1.525)))/2 : (Math.pow(2*x-2,2)*(((1.70158*1.525)+1)*(x*2-2)+(1.70158*1.525))+2)/2;
- };
- $.easing.easeInBounce=$.easing.easeInBounce || function(x){
- return 1-__bounceOut(1-x);
- };
- $.easing.easeOutBounce=$.easing.easeOutBounce || __bounceOut;
- $.easing.easeInOutBounce=$.easing.easeInOutBounce || function(x){
- return x<0.5 ? (1-__bounceOut(1-2*x))/2 : (1+__bounceOut(2*x-1))/2;
- };
- function __bounceOut(x){
- var n1=7.5625,d1=2.75;
- if(x<1/d1){
- return n1*x*x;
- }else if(x<2/d1){
- return n1*(x-=(1.5/d1))*x+.75;
- }else if(x<2.5/d1){
- return n1*(x-=(2.25/d1))*x+.9375;
- }else{
- return n1*(x-=(2.625/d1))*x+.984375;
- }
- }
- }
- }
-
- /*
- ---------------
- plugin setup
- ---------------
- */
-
- /* extend jquery with custom easings */
-
- functions._easing.call();
-
- /* plugin constructor functions */
-
- $.fn[pluginNS]=function(method){
- if(methods[method]){
- return methods[method].apply(this,Array.prototype.slice.call(arguments,1));
- }else if(typeof method==="object" || !method){
- return methods.init.apply(this,arguments);
- }else{
- $.error("Method "+method+" does not exist");
- }
- };
- $[pluginNS]=function(method){
- if(methods[method]){
- return methods[method].apply(this,Array.prototype.slice.call(arguments,1));
- }else if(typeof method==="object" || !method){
- return methods.init.apply(this,arguments);
- }else{
- $.error("Method "+method+" does not exist");
- }
- };
-
- /*
- allow setting plugin default options.
- example: $.plugin_name.defaults.option_name="option_value";
- */
-
- $[pluginNS].defaults=defaults;
-
- })(jQuery,window,document);
|