滚动到该部分时如何使Chart.js动画?

时间:2013-09-12 19:13:16

标签: javascript jquery html5 charts html5-canvas

我正在尝试使用Chart.js(http://www.chartjs.org/docs/#pieChart-exampleUsage)中的饼图。一切顺利,但动画会在页面加载后立即发生,但由于用户必须向下滚动才能看到图表,因此他们不会看到动画。无论如何我只能在滚动到该位置时才能启动动画?如果可能的话,每当该图表进入视图时,是否可以进行动画处理?

我的代码如下:

<canvas id="canvas" height="450" width="450"></canvas>
    <script>
        var pieData = [
                {
                    value: 30,
                    color:"#F38630"
                },
                {
                    value : 50,
                    color : "#E0E4CC"
                },
                {
                    value : 100,
                    color : "#69D2E7"
                }

            ];

    var myPie = new Chart(document.getElementById("canvas").getContext("2d")).Pie(pieData);

    </script>

5 个答案:

答案 0 :(得分:13)

您可以将检查某些内容是否可用标记进行组合,以便跟踪图形是否已在视口中显示(尽管使用插入的插件执行此操作会更简单):

http://jsfiddle.net/TSmDV/

var inView = false;

function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    return ((elemTop <= docViewBottom) && (elemBottom >= docViewTop));
}

$(window).scroll(function() {
    if (isScrolledIntoView('#canvas')) {
        if (inView) { return; }
        inView = true;
        new Chart(document.getElementById("canvas").getContext("2d")).Pie(data);
    } else {
        inView = false;  
    }
});

答案 1 :(得分:2)

最好使用延迟插件

https://chartjs-plugin-deferred.netlify.com/

<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-deferred@1"></script>

new Chart(ctx, {
  // ... data ...
  options: {
    // ... other options ...
    plugins: {
      deferred: {
        xOffset: 150,   // defer until 150px of the canvas width are inside the viewport
        yOffset: '50%', // defer until 50% of the canvas height are inside the viewport
        delay: 500      // delay of 500 ms after the canvas is considered inside the viewport
      }
    }
  }
});

答案 2 :(得分:1)

我不知道你是否能做到这一点,我有同样的问题,并以这种简单的方式解决它没有任何插件,请查看:

$(window).bind("scroll", function(){            
    $('.chartClass').each(function(i){ 
        var dougData = [
            {value: 100, color:"#6abd79"},
            {value: 20, color:"#e6e6e6"}
        ];
        var graphic = new Chart(document.getElementById("html-charts").getContext("2d")).Doughnut(dougData, options);
        $(window).unbind(i);
    });
});

答案 3 :(得分:1)

我遇到了与Chart.js相同的问题,并找到了一个非常好的解决方案。 GitHub上有一个由FVANCOP称为ChartNew.js的包。 他扩展了它并增加了几个功能。

查看示例,通过向下滚动绘制图表。

责任是声明

dynamicDisplay : true

答案 4 :(得分:0)

这就是你想要的:

Check if element is visible after scrolling

下次请检查是否已有答案;)

或者:jquery.appear