1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| var SlideItMoo = new Class({
initialize: function(options){
this.options = $extend({
itemsVisible:5,
showControls:1,
autoSlide: 0,
transition: Fx.Transitions.linear,
currentElement: 0,
thumbsContainer: 'thumbs',
elementScrolled: 'thumb_container',
overallContainer: 'gallery_container'
},options || {});
this.images = $(this.options.thumbsContainer).getElements('a');
// assumes that all thumbnails have the same width
this.image_size = this.images[0].getSize();
// resizes the container div's according to the number of itemsVisible thumbnails
this.setContainersSize();
this.myFx = new Fx.Scroll(this.options.elementScrolled,{ transition: this.options.transition });
// adds the forward-backward buttons
if( this.images.length > this.options.itemsVisible ){
this.fwd = this.addControlers('addfwd');
this.bkwd = this.addControlers('addbkwd');
this.forward();
this.backward();
/* if autoSlide is not set, scoll on mouse wheel */
if( !this.options.autoSlide ){
$(this.options.thumbsContainer).addEvent('mousewheel', function(ev){
new Event(ev).stop();
ev.wheel < 0 ? this.fwd.fireEvent('click') : this.bkwd.fireEvent('click');
}.bind(this));
}
else{
this.startIt = function(){ this.fwd.fireEvent('click') }.bind(this);
this.autoSlide = this.startIt.periodical(this.options.autoSlide, this);
this.images.addEvents({
'mouseover':function(){
$clear(this.autoSlide);
}.bind(this),
'mouseout':function(){
this.autoSlide = this.startIt.periodical(this.options.autoSlide, this);
}.bind(this)
})
}
};
// if there's a specific default thumbnail to start with, slide to it
if( this.options.currentElement!==0 ){
this.options.currentElement-=1;
this.slide(1);
}
},
setContainersSize: function(){
$(this.options.overallContainer).set({
styles:{
'width': this.options.itemsVisible * this.image_size.x + 50*this.options.showControls + (this.options.itemsVisible-1)*3
}
});
$(this.options.elementScrolled).set({
styles:{
'width': this.options.itemsVisible * this.image_size.x + (this.options.itemsVisible-1)*3
}
});
},
forward: function(){
this.fwd.addEvent('click',function(){
this.slide(1);
}.bind(this));
},
backward: function(){
this.bkwd.addEvent('click',function(){
this.slide(-1);
}.bind(this))
},
addControlers: function(cssClass){
element = new Element('div',{
'class': cssClass,
styles:{
'display': this.options.showControls ? '' : 'none'
}
}).injectInside($(this.options.overallContainer));
return element;
},
slide: function(step){
/* if autoslice is on, when end is reached, go back to begining */
if(this.options.autoSlide && this.options.currentElement >= this.images.length-this.options.itemsVisible ){
this.options.currentElement = -1;
}
if ( ( this.options.currentElement < this.images.length-this.options.itemsVisible && step>0 ) || ( step < 0 && this.options.currentElement !== 0 ) ){
this.myFx.cancel();
this.options.currentElement += step;
this.myFx.toElement( this.images[this.options.currentElement] );
}
}
}) |
Partager