var SlidingPresentation = new Class({ Extends: Presentation, // Assumes slides are positioned absolutely within the presentation swap: function(oldSlide, newSlide) { this.swapping = true; var slideWidth = oldSlide.getCoordinates().width; newSlide.setStyle('left', slideWidth); // Add newSlide to the DOM newSlide.inject(this.presentation); var newSlideFx = newSlide.retrieve('fx', null); if(!newSlideFx) { newSlideFx = new Fx.Tween(newSlide, {duration: this.options.transitionDuration, transition: this.options.transitionType}); newSlide.store('fx', newSlideFx); } var oldSlideFx = oldSlide.retrieve('fx', null); if(!oldSlideFx) { oldSlideFx = new Fx.Tween(oldSlide, {duration: this.options.transitionDuration, transition: this.options.transitionType}); oldSlide.store('fx', oldSlideFx); } // Remove any old swap complete events from these objects newSlideFx.removeEvents('complete'); oldSlideFx.removeEvents('complete'); // Trigger swap complete listener for oldSlide oldSlideFx.addEvent('complete', this.swapCompleteListener.bind(this)); // Start the fx newSlideFx.start('left', slideWidth - 5, 0); oldSlideFx.start('left', 0, 0 - slideWidth); } });