Moemoea

  1. Jquery carousel

    À partir du tuto making a jquery infinite carousel with nice features, quelques modif qui permettront une meilleure accessibilité.

    1. La fenêtre de visualisation du carousel a par défaut la propriété
      #carousel_inner{overflow: auto;}
      cela permet à l'utilisateur ayant désactivé javascript d'avoir quand même accès au contenu.
      L'overflow est changé pour hiddendans le javascript :
      $('.carousel_inner ').css({'overflow' : 'hidden'});
    2. Le comportement des boutons de scroll gauche et droite sera défini dans le javascript :
      	$("#left_scroll").click(function() {
      		slide('left');
      		return false;});
      	$("#right_scroll").click(function() {
      		slide('right');
      		return false;});
      J'ai trouvé aussi plus simple de positionner les boutons en absolu par rapport au container #carousel_container
      #left_scroll, #right_scroll{
      position: absolute; height:20px;width:20px; bottom: 0;
      }
      #right_scroll{right: 0;}	
      	
    3. Dans le javascript, pour calculer item_width :
      var item_width = $('.carousel_ul article').outerWidth(true);	
      	
    4. Pour récupérer la valeur de left indent :
      $('.carousel_ul').css({'left' : -item_width});	
      	

    Ce qui donne :

      $(document).ready(function() {
    
            //options( 1 - ON , 0 - OFF)
            var auto_slide = 1;
                var hover_pause = 1;
            var key_slide = 1;
    
            //speed of auto slide(
            var auto_slide_seconds = 5000;
            /* IMPORTANT: i know the variable is called ...seconds but it's
            in milliseconds ( multiplied with 1000) '*/
    
            /*move the last list item before the first item. The purpose of this is
            if the user clicks to slide left he will be able to see the last item.*/
            $('.carousel_ul article:first').before($('.carousel_ul article:last')); 
    
            //check if auto sliding is enabled
            if(auto_slide == 1){
                /*set the interval (loop) to call function slide with option 'right'
                and set the interval time to the variable we declared previously */
                var timer = setInterval('slide("right")', auto_slide_seconds); 
    
                /*and change the value of our hidden field that hold info about
                the interval, setting it to the number of milliseconds we declared previously*/
                $('#hidden_auto_slide_seconds').val(auto_slide_seconds);
            }
    
            //check if hover pause is enabled
            if(hover_pause == 1){
                //when hovered over the list
                $('.carousel_ul').hover(function(){
                    //stop the interval
                    clearInterval(timer)
                },function(){
                    //and when mouseout start it again
                    timer = setInterval('slide("right")', auto_slide_seconds);
                });
    
            }
    
            //check if key sliding is enabled
            if(key_slide == 1){
    
                //binding keypress function
                $(document).bind('keypress', function(e) {
                    //keyCode for left arrow is 37 and for right it's 39 '
                    if(e.keyCode==37){
                            //initialize the slide to left function
                            slide('left');
                    }else if(e.keyCode==39){
                            //initialize the slide to right function
                            slide('right');
                    }
                });
    
            }
    		
    		$('.carousel_inner ').css({'overflow' : 'hidden'});
    		 $("#left_scroll").click(function() {slide('left');
    		 return false;});
    		 $("#right_scroll").click(function() {slide('right');
    		 return false;});
    
    
      });
    
    //FUNCTIONS BELLOW
    
    //slide function
    function slide(where){
    
                //get the item width
                var item_width = $('.carousel_ul article').outerWidth(true);
    
                /* using a if statement and the where variable check
                we will check where the user wants to slide (left or right)*/
                if(where == 'left'){
                    //...calculating the new left indent of the unordered list (ul) for left sliding
                    var left_indent = parseInt($('.carousel_ul').css('left')) + item_width;
                }else{
                    //...calculating the new left indent of the unordered list (ul) for right sliding
                    var left_indent = parseInt($('.carousel_ul').css('left')) - item_width;
    
                }
    
                //make the sliding effect using jQuery's animate function... '
                $('.carousel_ul:not(:animated)').animate({'left' : left_indent},1000,function(){    
    
                    /* when the animation finishes use the if statement again, and make an ilussion
                    of infinity by changing place of last or first item*/
                    if(where == 'left'){
                        //...and if it slided to left we put the last item before the first item
                        $('.carousel_ul article:first').before($('.carousel_ul article:last'));
                    }else{
                        //...and if it slided to right we put the first item after the last item
                        $('.carousel_ul article:last').after($('.carousel_ul article:first'));
                    }
    
                    //...and then just get back the default left indent
                    //... $('.carousel_ul').css({'left' : '-670px'});
    				$('.carousel_ul').css({'left' : -item_width});
                });
    
    }