var tbCarousel = new Class({ Implements: [Options,Events], options: { container:null, innerContainer:null, navContainer:null, navButtons:null, slidesSelector:'a.slide', rows:null, maxWidth:null }, initialize: function(options){ var _this=this; this.setOptions(options); this.actualPage=0; this.running=false; //this.calcSizes(); //this.buildNav(); this.addTouchSupport(); /* this.carousel=new Fx.Scroll.Carousel(this.options.container,{ mode:'horizontal', link:'ignore', childSelector:this.options.slidesSelector, loopOnScrollEnd:true }); this.carousel.addEvent('onShow',function(index){_this.setActive(index)}); */ this.carousel=new Fx.Scroll(this.options.container,{ link:'ignore', onStart:function(){ _this.running=true; _this.setActive(_this.actualPage); }, onComplete:function(){ _this.running=false; } }); //this.toPage(0); window.addEvent('resize:pause(500)',function(){ if($(_this.options.container)){ if(!_this.options.maxWidth||$(document.body).getSize().x<_this.options.maxWidth){ _this.calcSizes(); _this.buildNav(); _this.toPage(0); } else{ $(_this.options.container).getElement('div.inner').setStyle('width','auto'); $(_this.options.navContainer).setStyle('visibility','hidden'); //$(_this.options.navContainer).getElement('a.prev').setStyle('visibility','hidden'); if($(_this.options.navContainer).getElement('a.prev')){ $(_this.options.navContainer).getElement('a.prev').addClass('disabled'); } //$(_this.options.navContainer).getElement('a.next').setStyle('visibility','hidden'); if($(_this.options.navContainer).getElement('a.next')){ $(_this.options.navContainer).getElement('a.next').addClass('disabled'); } } } }); window.fireEvent('resize'); }, calcSizes: function(){ this.pageWidth=$(this.options.container).getSize().x; var cellSize=$(this.options.container).getElement(this.options.slidesSelector).getSize(); var rows=parseInt((this.options.rows)?this.options.rows:$(this.options.container).getSize().y/cellSize.y); var cols=Math.floor(this.pageWidth/cellSize.x); var slidesAmount=$(this.options.container).getElements(this.options.slidesSelector).length; this.maxPages=Math.ceil(Math.ceil(slidesAmount/rows)/cols); $(this.options.container).getElements(this.options.slidesSelector).each(function(el,i){ el.setProperty('data-page',parseInt(i/(rows*cols))); }); var innerWidth=this.maxPages*this.pageWidth; //console.log(this.maxPages,this.pageWidth); //console.log(this.pageWidth,cellSize.x,cols); $(this.options.container).getElement('div.inner').setStyle('width',innerWidth); }, buildNav: function(){ if(this.options.navContainer){ if(this.maxPages>1){ this.actualPage=0; $(this.options.navContainer).set('html','').setStyle('visibility','visible'); var _this=this; new Element('a',{href:'#',class:'triangle prev',html:''}) .addEvent('click',function(e){ e.stop(); this.previousPage(); }.bind(this)) .inject($(this.options.navContainer)); for(i=0;i'}) .addEvent('click',function(e){ e.stop(); this.nextPage(); }.bind(this)) .inject($(this.options.navContainer)); } else{ $(this.options.navContainer).setStyle('visibility','hidden'); } } if(this.options.navButtons){ if(this.maxPages>1){ $(this.options.navButtons.prev).setStyle('visibility','visible'); $(this.options.navButtons.next).setStyle('visibility','visible'); this.options.navButtons.prev.removeEvent('click').addEvent('click',function(e){ e.stop(); this.previousPage(); }.bind(this)); this.options.navButtons.next.removeEvent('click').addEvent('click',function(e){ e.stop(); this.nextPage(); }.bind(this)); } else{ $(this.options.navButtons.prev).setStyle('visibility','hidden'); $(this.options.navButtons.next).setStyle('visibility','hidden'); } } }, setActive:function(index){ if(this.options.navContainer&&this.maxPages>1){ $(this.options.navContainer).getElements('a').removeClass('active'); $(this.options.navContainer).getElements('a.page')[this.actualPage].addClass('active'); } }, previousPage:function(){ this.actualPage--; this.toPage(); }, nextPage:function(){ this.actualPage++; this.toPage(); }, toPage:function(page){ if(!this.running){ if(page!==undefined) this.actualPage=page; if(this.actualPage<0) this.actualPage=0; if(this.actualPage>=this.maxPages) this.actualPage=this.maxPages-1; if(this.maxPages>1){ if(this.actualPage==0){ if(this.options.navContainer){ //$(this.options.navContainer).getElement('a.prev').setStyle('visibility','hidden'); $(this.options.navContainer).getElement('a.prev').addClass('disabled'); if(this.maxPages>1){ //$(this.options.navContainer).getElement('a.next').setStyle('visibility','visible'); $(this.options.navContainer).getElement('a.next').removeClass('disabled'); } } if(this.options.navButtons){ $(this.options.navButtons.prev).setStyle('visibility','hidden'); if(this.maxPages>1){ $(this.options.navButtons.next).setStyle('visibility','visible'); } } } else if(this.actualPage==this.maxPages-1){ if(this.options.navContainer){ //$(this.options.navContainer).getElement('a.next').setStyle('visibility','hidden'); $(this.options.navContainer).getElement('a.next').addClass('disabled'); if(this.maxPages>1){ //$(this.options.navContainer).getElement('a.prev').setStyle('visibility','visible'); $(this.options.navContainer).getElement('a.prev').removeClass('disabled'); } } if(this.options.navButtons){ $(this.options.navButtons.next).setStyle('visibility','hidden'); if(this.maxPages>1){ $(this.options.navButtons.prev).setStyle('visibility','visible'); } } } else{ if(this.maxPages>1){ if(this.options.navContainer){ //$(this.options.navContainer).getElement('a.prev').setStyle('visibility','visible'); // $(this.options.navContainer).getElement('a.next').setStyle('visibility','visible'); $(this.options.navContainer).getElement('a.prev').removeClass('disabled'); $(this.options.navContainer).getElement('a.next').removeClass('disabled'); } if(this.options.navButtons){ $(this.options.navButtons.prev).setStyle('visibility','visible'); $(this.options.navButtons.next).setStyle('visibility','visible'); } } } } this.carousel.start(this.actualPage*this.pageWidth); } }, addTouchSupport:function(){ var _this=this; $(this.options.container).getElements(this.options.slidesSelector).addEvents({ 'touchstart':function(e){ //e.preventDefault(); _this.touchX=e.touches[0].pageX; }, 'touchmove':function(e){ //e.preventDefault(); if(Math.abs(_this.touchX-e.touches[0].pageX)>10){ if(!_this.touched){ _this.touched=true; if(_this.touchX