【问题标题】:How can I make the the google chart animation start only when it comes into view when scrolled?如何使谷歌图表动画仅在滚动时才开始?
【发布时间】:2021-11-17 22:03:36
【问题描述】:

您好,我想知道如何使 google 图表动画仅在滚动和出现时才开始。

  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <div id="chart_div"></div>


google.charts.load('current', {packages: ['corechart', 'bar']});
google.charts.setOnLoadCallback(drawMultSeries);

function drawMultSeries() {
  var data = google.visualization.arrayToDataTable([
    ['City', '2010 Population', '2000 Population'],
    ['New York City, NY', 8175000, 8008000],
    ['Los Angeles, CA', 3792000, 3694000],
    ['Chicago, IL', 2695000, 2896000],
    ['Houston, TX', 2099000, 1953000],
    ['Philadelphia, PA', 1526000, 1517000]
  ]);

 var options = {  
              animation: {
            duration: 2000,
            startup: true //This is the new option
        },
           };  

  var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
  chart.draw(data, options);
}

【问题讨论】:

标签: javascript php html css


【解决方案1】:

您可以在滚动时添加侦听器,并且仅在条件下加载谷歌图表(“当用户滚动通过#chart_div”):

let alreadyLoaded = false ;     
window.addEventListener('scroll', function(){
if (alreadyLoaded === false){

        var element = document.querySelector('#chart_div');
        var position = element.getBoundingClientRect();
    
    
        if(position.top >= 0 && position.bottom <= window.innerHeight) {

    
        // checking for partial visibility
        if(position.top < window.innerHeight && position.bottom >= 0) {
    alreadyLoaded = true;  
       google.charts.load('current', {packages: ['corechart', 'bar']});
    google.charts.setOnLoadCallback(drawMultSeries);
    
    function drawMultSeries() {
      var data = google.visualization.arrayToDataTable([
        ['City', '2010 Population', '2000 Population'],
        ['New York City, NY', 8175000, 8008000],
        ['Los Angeles, CA', 3792000, 3694000],
        ['Chicago, IL', 2695000, 2896000],
        ['Houston, TX', 2099000, 1953000],
        ['Philadelphia, PA', 1526000, 1517000]
      ]);
    
     var options = {  
                  animation: {
                duration: 2000,
                startup: true //This is the new option
            },
               };  
    
      var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
      }
}
     });

【讨论】:

  • 谢谢。像魅力一样工作,但是当我再次向后滚动时,动画重新开始。有没有办法让动画在滚动到视图后只播放一次,直到页面刷新后才再次播放?抱歉,我是新手。
  • 当然你只需要创建一个布尔值(真/假)并跟踪脚本第一次加载的时间! (我已经更新了我的帖子添加了这个)
  • 感谢您回复和编辑代码。代码确实有效,动画不会播放不止一次。但是,图表只有在它像一个小滚动条时才会显示出来。例如,当我在页面顶部并且图表在底部时,如果我要一直滚动到底部,图表将不可见,直到页面刷新才会丢失。在之前提供的代码中不是这种情况。之前的代码 100% 工作,如果我要滚动,只播放动画不止一次。有什么解决办法吗?提前谢谢你。
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
相关资源
最近更新 更多