Changeset 43631 in spip-zone


Ignore:
Timestamp:
Jan 17, 2011, 9:25:37 PM (9 years ago)
Author:
real3t@…
Message:

Un bug dans la version 1.2.7 rendait la navigation au clavier impossible (tab, entrée pour lancer un scroll : ça scroll visuellement, mais le focus reste au lien initial ; du coup, tab passe au lien suivant le lien initial, et non à la zone ciblée).

Retour en version 1.2.6 en attendant mieux.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/couteau_suisse/outils/jquery.localscroll.js

    r38017 r43631  
    11/**
    22 * jQuery.LocalScroll
    3  * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
     3 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
    44 * Dual licensed under MIT and GPL.
    5  * Date: 3/11/2009
     5 * Date: 6/3/2008
    66 *
    77 * @projectDescription Animated scrolling navigation, using anchors.
    88 * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
    99 * @author Ariel Flesler
    10  * @version 1.2.7
     10 * @version 1.2.6
    1111 *
    1212 * @id jQuery.fn.localScroll
     
    2525 *      - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings.
    2626 *  - If the setting 'lazy' is set to true, then the binding will still work for later added anchors.
    27   *     - If onBefore returns false, the event is ignored.
     27 *  - The setting 'speed' is deprecated, use 'duration' instead.
     28 *      - If onBefore returns false, the event is ignored.
    2829 **/
    2930;(function( $ ){
    30         var URI = location.href.replace(/#.*/,''); // local url without hash
     31        var URI = location.href.replace(/#.*/,'');//local url without hash
    3132
    3233        var $localScroll = $.localScroll = function( settings ){
     
    3435        };
    3536
    36         // Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
    37         // @see http://flesler.demos.com/jquery/scrollTo/
    38         // The defaults are public and can be overriden.
    39         $localScroll.defaults = {
    40                 duration:1000, // How long to animate.
    41                 axis:'y', // Which of top and left should be modified.
    42                 event:'click', // On which event to react.
    43                 stop:true, // Avoid queuing animations
    44                 target: window, // What to scroll (selector or element). The whole window by default.
    45                 reset: true // Used by $.localScroll.hash. If true, elements' scroll is resetted before actual scrolling
     37        //Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
     38        //@see http://www.freewebs.com/flesler/jQuery.ScrollTo/
     39        $localScroll.defaults = {//the defaults are public and can be overriden.
     40                duration:1000, //how long to animate.
     41                axis:'y',//which of top and left should be modified.
     42                event:'click',//on which event to react.
     43                stop:true,//avoid queuing animations
     44                hash: true//if true, the hash of the selected link, will appear on the address bar.
    4645                /*
    47                 lock:false, // ignore events if already animating
    48                 lazy:false, // if true, links can be added later, and will still work.
    49                 filter:null, // filter some anchors out of the matched elements.
    50                 hash: false // if true, the hash of the selected link, will appear on the address bar.
     46                lock:false,//ignore events if already animating
     47                lazy:false,//if true, links can be added later, and will still work.
     48                target:null, //what to scroll (selector or element). Keep it null if want to scroll the whole window.
     49                filter:null, //filter some anchors out of the matched elements.
    5150                */
    5251        };
    5352
    54         // If the URL contains a hash, it will scroll to the pointed element
     53        //if the URL contains a hash, it will scroll to the pointed element
    5554        $localScroll.hash = function( settings ){
    56                 if( location.hash ){
    57                         settings = $.extend( {}, $localScroll.defaults, settings );
    58                         settings.hash = false; // can't be true
    59                        
    60                         if( settings.reset ){
    61                                 var d = settings.duration;
    62                                 delete settings.duration;
    63                                 $(settings.target).scrollTo( 0, settings );
    64                                 settings.duration = d;
    65                         }
    66                         scroll( 0, location, settings );
    67                 }
     55                settings = $.extend( {}, $localScroll.defaults, settings );
     56//              settings.hash = false;//can't be true
     57                if( location.hash )
     58                        setTimeout(function(){ scroll( 0, location, settings ); }, 0 );//better wrapped with a setTimeout
    6859        };
    6960
     
    7162                settings = $.extend( {}, $localScroll.defaults, settings );
    7263
    73                 return settings.lazy ?
    74                         // use event delegation, more links can be added later.         
    75                         this.bind( settings.event, function( e ){
    76                                 // Could use closest(), but that would leave out jQuery -1.3.x
    77                                 var a = $([e.target, e.target.parentNode]).filter(filter)[0];
    78                                 // if a valid link was clicked
    79                                 if( a )
    80                                         scroll( e, a, settings ); // do scroll.
    81                         }) :
    82                         // bind concretely, to each matching link
    83                         this.find('a,area')
    84                                 .filter( filter ).bind( settings.event, function(e){
    85                                         scroll( e, this, settings );
    86                                 }).end()
    87                         .end();
     64                return ( settings.persistent || settings.lazy )
     65                                ? this.bind( settings.event, function( e ){//use event delegation, more links can be added later.
     66                                        var a = $([e.target, e.target.parentNode]).filter(filter)[0];//if a valid link was clicked.
     67                                        a && scroll( e, a, settings );//do scroll.
     68                                })
     69                                : this.find('a,area')//bind concretely, to each matching link
     70                                                .filter( filter ).bind( settings.event, function(e){
     71                                                        scroll( e, this, settings );
     72                                                }).end()
     73                                        .end();
    8874
    89                 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.
     75                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.
    9076                        return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter ));
    9177                };
     
    9581                var id = link.hash.slice(1),
    9682                        elem = document.getElementById(id) || document.getElementsByName(id)[0];
     83                if ( elem ){
     84                        e && e.preventDefault();
     85                        var $target = $( settings.target || $.scrollTo.window() );//if none specified, then the window.
    9786
    98                 if ( !elem )
    99                         return;
     87                        if( settings.lock && $target.is(':animated') ||
     88                        settings.onBefore && settings.onBefore.call(link, e, elem, $target) === false ) return;
    10089
    101                 if( e )
    102                         e.preventDefault();
    103 
    104                 var $target = $( settings.target );
    105 
    106                 if( settings.lock && $target.is(':animated') ||
    107                         settings.onBefore && settings.onBefore.call(settings, e, elem, $target) === false )
    108                         return;
    109 
    110                 if( settings.stop )
    111                         $target.stop(true); // remove all its animations
    112 
    113                 if( settings.hash ){
    114                         var attr = elem.id == id ? 'id' : 'name',
    115                                 $a = $('<a> </a>').attr(attr, id).css({
    116                                         position:'absolute',
    117                                         top: $(window).scrollTop(),
    118                                         left: $(window).scrollLeft()
     90                        if( settings.stop )
     91                                $target.queue('fx',[]).stop();//remove all its animations
     92                        $target
     93                                .scrollTo( elem, settings )//do scroll
     94                                .trigger('notify.serialScroll',[elem]);//notify serialScroll about this change
     95                        if( settings.hash )
     96                                $target.queue(function(){
     97                                        location = URI+link.hash;
     98                                        // make sure this function is released
     99                                        $(this).dequeue();
    119100                                });
    120 
    121                         elem[attr] = '';
    122                         $('body').prepend($a);
    123                         location = link.hash;
    124                         $a.remove();
    125                         elem[attr] = id;
    126101                }
    127                        
    128                 $target
    129                         .scrollTo( elem, settings ) // do scroll
    130                         .trigger('notify.serialScroll',[elem]); // notify serialScroll about this change
    131102        };
    132103
Note: See TracChangeset for help on using the changeset viewer.