À partir du tuto making a jquery infinite carousel with nice features, quelques modif qui permettront une meilleure accessibilité.
- 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é pourhiddendans le javascript :$('.carousel_inner ').css({'overflow' : 'hidden'}); - Le comportement des boutons de scroll gauche et droite sera défini dans le javascript :
J'ai trouvé aussi plus simple de positionner les boutons en absolu par rapport au container$("#left_scroll").click(function() { slide('left'); return false;}); $("#right_scroll").click(function() { slide('right'); return false;});#carousel_container#left_scroll, #right_scroll{ position: absolute; height:20px;width:20px; bottom: 0; } #right_scroll{right: 0;} - Dans le javascript, pour calculer
item_width:var item_width = $('.carousel_ul article').outerWidth(true); -
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});
});
}
