Interaction model demo: Clever hack -- now when scrolling down the page,
authorRobert Konigsberg <konigsberg@google.com>
Wed, 29 Dec 2010 21:39:29 +0000 (13:39 -0800)
committerRobert Konigsberg <konigsberg@google.com>
Wed, 29 Dec 2010 21:39:29 +0000 (13:39 -0800)
the dygraph will not zoom when you scroll past it, unless you pause or
perform a non-scroll mouse event.

tests/interaction.html
tests/interaction.js

index 3d01ecd..972b0a3 100644 (file)
@@ -46,6 +46,9 @@
     </table>
         
     <script type="text/javascript">
+      Dygraph.addEvent(document, "mousewheel", function() { suspendGraphScroll(); });
+      Dygraph.addEvent(document, "mousedown", function() { clearGraphScroll(); });
+      Dygraph.addEvent(document, "mousemove", function() { clearGraphScroll(); });
       var g = new Dygraph(document.getElementById("div_g"),
            NoisyData, { errorBars : true });
       var g2 = new Dygraph(document.getElementById("div_g2"),
index 1449e71..f4925da 100644 (file)
@@ -1,4 +1,6 @@
+
 function downV3(event, g, context) {
+  resetGraphScroll();
   context.initializeMouseDown(event, g, context);
   if (event.altKey || event.shiftKey) {
     Dygraph.startZoom(event, g, context);
@@ -8,6 +10,7 @@ function downV3(event, g, context) {
 }
 
 function moveV3(event, g, context) {
+  resetGraphScroll();
   if (context.isPanning) {
     Dygraph.movePan(event, g, context);
   } else if (context.isZooming) {
@@ -70,7 +73,22 @@ function dblClickV3(event, g, context) {
   }
 }
 
+var scrollTimeMillis = 0;
+
+function suspendGraphScroll() {
+  scrollTimeMillis = new Date().getTime();
+}
+
+function resetGraphscroll() {
+  scrollTimeMillis = 0;
+}
+
 function scrollV3(event, g, context) {
+  var millis = new Date().getTime();
+  if (millis - scrollTimeMillis < 250) {
+    suspendGraphScroll();
+    return;
+  }
   var normal = event.detail ? event.detail * -1 : event.wheelDelta / 40;
   // For me the normalized value shows 0.075 for one click. If I took
   // that verbatim, it would be a 7.5%.