gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:58:48 24 4
gpt4 key购买 nike

我正在使用 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com