How to make the Chart.js animate when scrolled to that section?

前端 未结 5 948
挽巷
挽巷 2020-12-10 05:28

I am trying to use the pie chart from Chart.js (http://www.chartjs.org/docs/#pieChart-exampleUsage). Everything works smooth, but the animation happens as soon as the page l

相关标签:
5条回答
  • 2020-12-10 06:04

    You can combine the check for whether something is viewable with a flag to keep track of whether the graph has been drawn since it appeared in the viewport (though doing this with the plugin bitiou posted would be simpler):

    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;  
        }
    });
    
    0 讨论(0)
  • 2020-12-10 06:06

    This is what you want:

    Check if element is visible after scrolling

    Next time please check if there's already an answer ;)

    Alternatively: jquery.appear

    0 讨论(0)
  • 2020-12-10 06:09

    I had the same problem with Chart.js and found a really great solution. There is a package on GitHub that is called ChartNew.js by FVANCOP. He expanded it and added several functions.

    Look at the sample, the charts are drawn by scrolling down.

    Responsible is the statement

    dynamicDisplay : true
    
    0 讨论(0)
  • 2020-12-10 06:14

    Best to use deferred plugin

    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
          }
        }
      }
    });
    
    0 讨论(0)
  • 2020-12-10 06:15

    I don't know if you could do that, I had the same issue and resolved it without any plugin in this simple way, check out:

    $(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);
        });
    });
    
    0 讨论(0)
提交回复
热议问题