$slideshow = { context: false, tabs: false, timeout: 100, // time before next slide appears (in ms) speed: 3000, // time it takes to slide in each slide (in ms) tabSpeed: 0, // time it takes to slide in each slide (in ms) when clicking through tabs fx: 'fade', // the slide effect to use init: function() { // set the context to help speed up selectors/improve performance this.context = $('#slideshow'); // set tabs to current hard coded navigation items this.tabs = $('ul.slides-nav li'); // remove hard coded navigation items from DOM // because they aren't hooked up to jQuery cycle this.tabs.remove(); // prepare slideshow and jQuery cycle tabs this.prepareSlideshow(); }, prepareSlideshow: function() { // initialise the jquery cycle plugin - // for information on the options set below go to: // http://malsup.com/jquery/cycle/options.html $('div.slides > ul', $slideshow.context).cycle({ fx: $slideshow.fx, //delay: -1000, timeout: $slideshow.timeout, speed: $slideshow.speed, fastOnEvent: $slideshow.tabSpeed, pager: $('ul.slides-nav'), pagerAnchorBuilder: $slideshow.prepareTabs, before: $slideshow.activateTab, pauseOnPagerHover: true, pause: true }); }, prepareTabs: function(i, slide) { // return markup from hardcoded tabs for use as jQuery cycle tabs // (attaches necessary jQuery cycle events to tabs) return $slideshow.tabs.eq(i); }, activateTab: function(currentSlide, nextSlide) { // get the active tab var activeTab = $("#"+ nextSlide.id ); // if there is an active tab if(activeTab.length) { // remove active styling from all other tabs $slideshow.tabs.removeClass('on'); // add active styling to active button activeTab.addClass('on'); } } }; $(function() { // add a 'js' class to the body $('body').addClass('js'); // initialise the slideshow when the DOM is ready $slideshow.init(); });