web/rsln-opendata/res/metadataplayer/test/interface 1.2/source/ifxscrollto.js
changeset 120 3daa4039509a
parent 119 4c86151704e9
child 121 2b794b7901d6
equal deleted inserted replaced
119:4c86151704e9 120:3daa4039509a
     1 /**
       
     2  * Interface Elements for jQuery
       
     3  * FX - scroll to
       
     4  * 
       
     5  * http://interface.eyecon.ro
       
     6  * 
       
     7  * Copyright (c) 2006 Stefan Petre
       
     8  * Dual licensed under the MIT (MIT-LICENSE.txt) 
       
     9  * and GPL (GPL-LICENSE.txt) licenses.
       
    10  *   
       
    11  *
       
    12  */
       
    13 /**
       
    14  * Applies a scrolling effect to document until the element gets into viewport
       
    15  */
       
    16 jQuery.fn.extend (
       
    17 	{
       
    18 		/**
       
    19 		 * @name ScrollTo
       
    20 		 * @description scrolls the document until the lement gets into viewport
       
    21 		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
       
    22 		 * @param String axis (optional) whatever to scroll on vertical, horizontal or both axis ['vertical'|'horizontal'|null]
       
    23 		 * @param String easing (optional) The name of the easing effect that you want to use.
       
    24 		 * @type jQuery
       
    25 		 * @cat Plugins/Interface
       
    26 		 * @author Stefan Petre
       
    27 		 */
       
    28 		ScrollTo : function(speed, axis, easing) {
       
    29 			o = jQuery.speed(speed);
       
    30 			return this.queue('interfaceFX',function(){
       
    31 				new jQuery.fx.ScrollTo(this, o, axis, easing);
       
    32 			});
       
    33 		},
       
    34 		/**
       
    35 		 * @name ScrollToAnchors
       
    36 		 * @description all links to '#elementId' will animate scroll
       
    37 		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
       
    38 		 * @param String axis (optional) whatever to scroll on vertical, horizontal or both axis ['vertical'|'horizontal'|null]
       
    39 		 * @param String easing (optional) The name of the easing effect that you want to use.
       
    40 		 * @type jQuery
       
    41 		 * @cat Plugins/Interface
       
    42 		 * @author Stefan Petre
       
    43 		 */
       
    44 		/*inspired by David Maciejewski www.macx.de*/
       
    45 		ScrollToAnchors : function(speed, axis, easing) {
       
    46 			return this.each(
       
    47 				function()
       
    48 				{
       
    49 					jQuery('a[@href*="#"]', this).click(
       
    50 						function(e)
       
    51 						{
       
    52 							parts = this.href.split('#');
       
    53 							jQuery('#' + parts[1]).ScrollTo(speed, axis, easing);
       
    54 							return false;
       
    55 						}
       
    56 					);
       
    57 				}
       
    58 			)
       
    59 		}
       
    60 	}
       
    61 );
       
    62 
       
    63 jQuery.fx.ScrollTo = function (e, o, axis, easing)
       
    64 {
       
    65 	var z = this;
       
    66 	z.o = o;
       
    67 	z.e = e;
       
    68 	z.axis = /vertical|horizontal/.test(axis) ? axis : false;
       
    69 	z.easing = easing;
       
    70 	p = jQuery.iUtil.getPosition(e);
       
    71 	s = jQuery.iUtil.getScroll();
       
    72 	z.clear = function(){clearInterval(z.timer);z.timer=null;jQuery.dequeue(z.e, 'interfaceFX');};
       
    73 	z.t=(new Date).getTime();
       
    74 	s.h = s.h > s.ih ? (s.h - s.ih) : s.h;
       
    75 	s.w = s.w > s.iw ? (s.w - s.iw) : s.w;
       
    76 	z.endTop = p.y > s.h ? s.h : p.y;
       
    77 	z.endLeft = p.x > s.w ? s.w : p.x;
       
    78 	z.startTop = s.t;
       
    79 	z.startLeft = s.l;
       
    80 	z.step = function(){
       
    81 		var t = (new Date).getTime();
       
    82 		var n = t - z.t;
       
    83 		var p = n / z.o.duration;
       
    84 		if (t >= z.o.duration+z.t) {
       
    85 			z.clear();
       
    86 			setTimeout(function(){z.scroll(z.endTop, z.endLeft)},13);
       
    87 		} else {
       
    88 			if (!z.axis || z.axis == 'vertical') {
       
    89 				if (!jQuery.easing || !jQuery.easing[z.easing]) {
       
    90 					st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.endTop-z.startTop) + z.startTop;
       
    91 				} else {
       
    92 					st = jQuery.easing[z.easing](p, n, z.startTop, (z.endTop - z.startTop), z.o.duration);
       
    93 				}
       
    94 			} else {
       
    95 				st = z.startTop;
       
    96 			}
       
    97 			if (!z.axis || z.axis == 'horizontal') {
       
    98 				if (!jQuery.easing || !jQuery.easing[z.easing]) {
       
    99 					sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.endLeft-z.startLeft) + z.startLeft;
       
   100 				} else {
       
   101 					sl = jQuery.easing[z.easing](p, n, z.startLeft, (z.endLeft - z.startLeft), z.o.duration);
       
   102 				}
       
   103 			} else {
       
   104 				sl = z.startLeft;
       
   105 			}
       
   106 			z.scroll(st, sl);
       
   107 		}
       
   108 	};
       
   109 	z.scroll = function (t, l){window.scrollTo(l, t);};
       
   110 	z.timer=setInterval(function(){z.step();},13);
       
   111 };