go.talks: handle scrolling events to navigate slides

R=r, adg
CC=golang-dev
https://golang.org/cl/12271043
diff --git a/present/static/slides.js b/present/static/slides.js
index 863e7ac..0c31bd3 100644
--- a/present/static/slides.js
+++ b/present/static/slides.js
@@ -297,6 +297,26 @@
   document.body.removeEventListener('touchend', handleTouchEnd, true);  
 };
 
+/* Mouse wheel events */
+
+// Used to limit the number of slides advanced.
+var tooSoon = false;
+
+function handleMouseWheel(event) {
+  event.preventDefault();
+  if (tooSoon) return;
+
+  // FireFox exposes delta in detail, instead of wheelDelta.
+  var delta = event.wheelDelta ? event.wheelDelta : -event.detail;
+  // Scrolling down or left means next.
+  if (delta > 0) nextSlide();
+  // Scrolling up or right means previous.
+  if (delta < 0) prevSlide();
+
+  tooSoon = true;
+  setTimeout(function() { tooSoon = false;}, 250);
+}
+
 /* Preloading frames */
 
 function disableSlideFrames(no) {
@@ -365,6 +385,12 @@
   /* Swiping */
   
   document.body.addEventListener('touchstart', handleTouchStart, false);
+
+  /* Scrolling */
+
+  document.body.addEventListener('mousewheel', handleMouseWheel, false);
+  // Needed for FireFox (Gecko)
+  document.body.addEventListener('DOMMouseScroll', handleMouseWheel, false);
 }
 
 /* Hash functions */