google-visualization - 如何在 Google Annotated Timeline 中禁用鼠标滚轮缩放?

标签 google-visualization scrollwheel annotatedtimeline

我正在使用 Google Annotated Timeline 图表,鼠标滚轮缩放时间刻度变得很烦人。我希望能够使用滚轮向下滚动图表页面,但时间线图表正在拦截滚轮事件。它阻止我向下滚动页面并将我的时间线缩放更改为不可用的范围。

最佳答案

我为你的问题写了一个解决方案。我已将我的解决方案应用于来自 google 的带注释的时间线示例此外,我使用了来自 here 的鼠标滚轮事件捕获技术。 .

要重现问题:

  • Demo of graph如果您不应用下面的解决方案代码。
  • Another demo如果您确实应用了解决方案代码,则该图的显示。

  • 要查看差异,请在鼠标指针位于图形上时滚动鼠标滚轮。

    下面的代码检测鼠标滚轮是否被移动。如果是这种情况,变量 scrolled在接下来的 1.5 秒内设置为 1,并应用正常的页面滚动行为。

    如果在接下来的 1.5 秒内 rangechange事件由 annotatedtimeline 触发对象范围的更改已撤消。这样,您的原始图形缩放级别就会恢复。

    如果用户以任何其他方式更改缩放级别,例如通过拖动图形上的一些控件,新状态保存在变量 chartRange 中。 ,在必须撤消范围更改时读取。

    在解决方案代码下方:

    <html>
      <head>
        <script type="text/javascript" src="http://www.google.com/jsapi"></script>
        <script type="text/javascript">
            // source: https://developers.google.com/chart/interactive/docs/
            //          gallery/annotatedtimeline
          google.load('visualization', '1', {packages: ['annotatedtimeline']});
          function drawVisualization() {
            var data = new google.visualization.DataTable();
            data.addColumn('date', 'Date');
            data.addColumn('number', 'Sold Pencils');
            data.addColumn('string', 'title1');
            data.addColumn('string', 'text1');
            data.addColumn('number', 'Sold Pens');
            data.addColumn('string', 'title2');
            data.addColumn('string', 'text2');
            data.addRows([
              [new Date(2008, 1 ,1), 30000, null, null, 40645, null, null],
              [new Date(2008, 1 ,2), 14045, null, null, 20374, null, null],
              [new Date(2008, 1 ,3), 55022, null, null, 50766, null, null],
              [new Date(2008, 1 ,4), 75284, null, null, 14334, 'Out of Stock', 
                'Ran out of stock on pens at 4pm'],
              [new Date(2008, 1 ,5), 41476, 'Bought Pens', 'Bought 200k pens', 
                66467, null, null],
              [new Date(2008, 1 ,6), 33322, null, null, 39463, null, null]
            ]);    
            var annotatedtimeline = new google.visualization.AnnotatedTimeLine(
                document.getElementById('visualization'));
            annotatedtimeline.draw(data, {'displayAnnotations': true, 
              'wmode': 'transparent'});
    
            // In the lines below the default scroll when the mouse is on the 
            // AnnotatedTimeLine graph is disabled and normal page scroll  
            // behaviour is enabled.
            var chartRange, scrolled, mySetInterval                
            google.visualization.events.addListener(annotatedtimeline , 'ready', 
             function() {        
                //save the zoom state in chartRange after graph has been rendered
                chartRange = annotatedtimeline.getVisibleChartRange();
            });      
            google.visualization.events.addListener(annotatedtimeline , 
             'rangechange',function() {        
              if (scrolled) {
                // document was scrolled during last 1.5 seconds, therefore undo 
                // zooming. The 1.5 second delay is needed because rangechange is 
                // fired one 1 second after scroll event
                annotatedtimeline.setVisibleChartRange(chartRange.start, 
                 chartRange.end);
              }else{
                // document was not scrolled during last 1.5 seconds, therefore
                // save the zoom state in chartRange
                chartRange = annotatedtimeline.getVisibleChartRange();
              }
            });
    
            // source: http://help.dottoro.com/ljqeknfl.php
            // for mouse scrolling in Firefox
            var elem = document.getElementById ("visualization");
            if (elem.addEventListener) {//all browsers except IE before version 9
                  // Internet Explorer, Opera, Google Chrome and Safari
              elem.addEventListener ("mousewheel", MouseScroll, false);
                  // Firefox
              elem.addEventListener ("DOMMouseScroll", MouseScroll, false);
            }
            else {
              if (elem.attachEvent) { // IE before version 9
                  elem.attachEvent ("onmousewheel", MouseScroll);
              }
            }   
    
            //original from:http://help.dottoro.com/ljqeknfl.php and edited by me
            function MouseScroll (event) {
                // set scrolled to 1 for the next 1.5 second, and via 
                // mySetInterval make sure when multiple scroll event in 1.5 
                //  second appear, everything wroks correctly
                clearInterval(mySetInterval);
                scrolled=1;mySetInterval=setInterval(function(){scrolled=0},1500);
    
                //determine distance to be rolled
                var rolled = 0;
                if ('wheelDelta' in event) {
                rolled = event.wheelDelta;
                }
                else {  // Firefox
                        // The measurement units of the detail and wheelDelta 
                        // properties are different.
                rolled = -40 * event.detail;
                }
                //apply normal page scroll behaviour
                document.body.scrollTop -=rolled;
            }
          }    
          google.setOnLoadCallback(drawVisualization);
        </script>
      </head>
      <body style="font-family: Arial;border: 0 none;">
        <div id="visualization" style="width: 800px; height: 400px;"></div>
        <div style="height:1200px; background-color:#a08080;"></div>
      </body>
    </html>
    

    关于google-visualization - 如何在 Google Annotated Timeline 中禁用鼠标滚轮缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714631/

    相关文章:

    google-visualization - 谷歌地理图表不兼容的数据表 : Error: Table contains more columns than expected (Expecting 3 columns)

    c++ - glutMouseFunc 上没有滚轮回调

    JavaScript 函数——用 wheel 事件调用一次?

    r - 时间线的最佳技术

    jquery - Google jsapi 无法在 Jquery 对话框中加载

    php - 如何下载 Google Chart API?

    javascript - 为什么这段代码在渲染两个不同的谷歌图表时抛出语法错误

    javascript - 从 Google Charts WordTree 中删除工具提示

    opengl - 在 GLUT 中使用鼠标滚轮