From 38b229a22f3f87038037f160e204953358eb0617 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sat, 14 Jan 2012 19:22:27 -0800 Subject: tweaked mouse wheel navigation --- js/reveal.js | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) (limited to 'js') diff --git a/js/reveal.js b/js/reveal.js index fe66dab..6a33983 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -54,6 +54,7 @@ var Reveal = (function(){ history: false, transition: 'default', theme: 'default', + mouseWheel: true, rollingLinks: true }, @@ -70,7 +71,10 @@ var Reveal = (function(){ document.body.style['WebkitTransform'] !== undefined || document.body.style['MozTransform'] !== undefined || document.body.style['msTransform'] !== undefined || - document.body.style['OTransform'] !== undefined; + document.body.style['OTransform'] !== undefined, + + // Throttles mouse wheel navigation + mouseWheelTimeout = 0; /** * Starts up the slideshow by applying configuration @@ -129,15 +133,15 @@ var Reveal = (function(){ dom.wrapper.classList.add( config.theme ); } + if( config.mouseWheel ) { + document.addEventListener('DOMMouseScroll', onDocumentMouseScroll, false); // FF + document.addEventListener('mousewheel', onDocumentMouseScroll, false); + } + if( config.rollingLinks ) { // Add some 3D magic to our anchors linkify(); } - - //bind scrolling - if(window.addEventListener){ - document.addEventListener('DOMMouseScroll', scrollStep, false); - } // Read the initial hash readURL(); @@ -251,6 +255,24 @@ var Reveal = (function(){ slide(); } } + + /** + * Handles mouse wheel scrolling, throttled to avoid + * skipping multiple slides. + */ + function onDocumentMouseScroll( event ){ + clearTimeout( mouseWheelTimeout ); + + mouseWheelTimeout = setTimeout( function() { + var delta = event.detail || -event.wheelDelta; + if( delta > 0 ) { + availableRoutes().down ? navigateDown() : navigateRight(); + } + else { + availableRoutes().up ? navigateUp() : navigateLeft(); + } + }, 100 ); + } /** * Handler for the window level 'hashchange' event. @@ -627,26 +649,6 @@ var Reveal = (function(){ } } - var stepT=0; - function scrollStep(e){ - clearTimeout(stepT); - stepT=setTimeout(function(){ - if(e.detail>0){ - if(availableRoutes().down){ - navigateDown() - }else{ - navigateRight() - } - }else{ - if(availableRoutes().up){ - navigateUp() - }else{ - navigateLeft() - } - } - },200); - } - // Expose some methods publicly return { initialize: initialize, -- cgit v1.2.3