X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fjquery.localscroll.js;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fjquery.localscroll.js;h=762ebb158a53c21fc2c575f6ba0d366a9faebf96;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/jquery.localscroll.js b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/jquery.localscroll.js new file mode 100644 index 0000000..762ebb1 --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/jquery.localscroll.js @@ -0,0 +1,104 @@ +/** + * jQuery.LocalScroll + * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * Date: 6/3/2008 + * + * @projectDescription Animated scrolling navigation, using anchors. + * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html + * @author Ariel Flesler + * @version 1.2.6 + * + * @id jQuery.fn.localScroll + * @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required. + * @return {jQuery} Returns the same jQuery object, for chaining. + * + * @example $('ul.links').localScroll(); + * + * @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' }); + * + * @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' }); + * + * Notes: + * - The plugin requires jQuery.ScrollTo. + * - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well. + * - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings. + * - If the setting 'lazy' is set to true, then the binding will still work for later added anchors. + * - The setting 'speed' is deprecated, use 'duration' instead. + * - If onBefore returns false, the event is ignored. + **/ +;(function( $ ){ + var URI = location.href.replace(/#.*/,'');//local url without hash + + var $localScroll = $.localScroll = function( settings ){ + $('body').localScroll( settings ); + }; + + //Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option. + //@see http://www.freewebs.com/flesler/jQuery.ScrollTo/ + $localScroll.defaults = {//the defaults are public and can be overriden. + duration:1000, //how long to animate. + axis:'y',//which of top and left should be modified. + event:'click',//on which event to react. + stop:true,//avoid queuing animations + hash: true//if true, the hash of the selected link, will appear on the address bar. + /* + lock:false,//ignore events if already animating + lazy:false,//if true, links can be added later, and will still work. + target:null, //what to scroll (selector or element). Keep it null if want to scroll the whole window. + filter:null, //filter some anchors out of the matched elements. + */ + }; + + //if the URL contains a hash, it will scroll to the pointed element + $localScroll.hash = function( settings ){ + settings = $.extend( {}, $localScroll.defaults, settings ); +// settings.hash = false;//can't be true + if( location.hash ) + setTimeout(function(){ scroll( 0, location, settings ); }, 0 );//better wrapped with a setTimeout + }; + + $.fn.localScroll = function( settings ){ + settings = $.extend( {}, $localScroll.defaults, settings ); + + return ( settings.persistent || settings.lazy ) + ? this.bind( settings.event, function( e ){//use event delegation, more links can be added later. + var a = $([e.target, e.target.parentNode]).filter(filter)[0];//if a valid link was clicked. + a && scroll( e, a, settings );//do scroll. + }) + : this.find('a,area')//bind concretely, to each matching link + .filter( filter ).bind( settings.event, function(e){ + scroll( e, this, settings ); + }).end() + .end(); + + function filter(){//is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF. + return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter )); + }; + }; + + function scroll( e, link, settings ){ + var id = link.hash.slice(1), + elem = document.getElementById(id) || document.getElementsByName(id)[0]; + if ( elem ){ + e && e.preventDefault(); + var $target = $( settings.target || $.scrollTo.window() );//if none specified, then the window. + + if( settings.lock && $target.is(':animated') || + settings.onBefore && settings.onBefore.call(link, e, elem, $target) === false ) return; + + if( settings.stop ) + $target.queue('fx',[]).stop();//remove all its animations + $target + .scrollTo( elem, settings )//do scroll + .trigger('notify.serialScroll',[elem]);//notify serialScroll about this change + if( settings.hash ) + $target.queue(function(){ + location = URI+link.hash; + // make sure this function is released + $(this).dequeue(); + }); + } + }; + +})( jQuery ); \ No newline at end of file