当前位置: 首页 > 知识库问答 >
问题:

只更新chart.js,不使用动画,也不刷新浏览器

萧英睿
2023-03-14

我尝试只更新chart.js,而不需要刷新浏览器,也不需要重新加载所有行的动画。我尝试使用简单的命令chart.update(),但它不断刷新浏览器和动画。我想用尽可能简单的方式来做这件事。我的数据来自数据库。
这是我的图表:

<script>
    var newData = [<?php echo $datacor1;?>];
    var lbl = [<?php echo $labels; ?>];
    var ctx1 = document.getElementById('mychart1');

    var myLineChart = new Chart(ctx1, {
        type: 'line', 
        data: {
          labels: lbl,
          datasets: [
            {
              label: "Corrente 1",
              data: [<?php echo $datacor1;?>],
              borderWidht: 6,
              borderColor: 'red',
              backgroundColor: 'transparent'
            },
            {
              label: "Corrente 2",
              data: [<?php echo $datacor2; ?>],
              borderWidht: 6,
              borderColor: 'blue',
              backgroundColor: 'transparent'
            },
            {
              label: "Corrente 3",
              data: [<?php echo $datacor3; ?>],
              borderWidht: 6,
              borderColor: 'green',
              backgroundColor: 'transparent'
            },
            {
              label: "Corrente Total",
              data: [<?php echo $datatotcor; ?>],
              borderWidht: 6,
              borderColor: 'black',
              backgroundColor: 'transparent'
            },
          ]            
        },
        plugins: [

        ],
        options: {
          scales: {
            yAxes: [{
              ticks: {
                beginAtZero: true
              }
            }],
            xAxes: [{
              gridLines: {
                display: false
              }
            }]
          },

          title: {
            display: true,
            fontSize: 20,
            text: "Gráfico das Correntes"
          },

          labels: {
            fontStyle: "bold",
          },

          layout: {
            padding: {
              left: 0,
              right: 0,
              top: 0,
              bottom: 0
            }
          },
          tooltips: {
            enabled: true,
            mode: 'single',
            responsive: true,
            backgroundColor: 'black',
            titleFontFamily: "'Arial'",
            titleFontSize: 14,
            titleFontStyle: 'bold',
            titleAlign: 'center',
            titleSpacing: 4,
            titleMarginBottom: 10,
            bodyFontFamily: "'Mukta'",
            bodyFontSize: 14,
            borderWidth: 2,
            borderColor: 'grey',
            callbacks:{
              title: function(tooltipItem, data) {
                  return data.labels[tooltipItem[0].index];
              },
              afterTitle: function(tooltipItem, data) {
                var date = <?php echo json_encode($tempo) ?>

                return date[tooltipItem[0]['index']]; 
              },
              label: function(tooltipItem, data) {
                    var label = data.datasets[tooltipItem.datasetIndex].label || '';                  
                    if (label) {
                        label += ': ';
                    }
                    label += (tooltipItem.yLabel)+"A";                  
                    return label;
              }
            }
          },
          aspectRatio: 1,
          maintainAspectRatio: false
        }
    });

    function updateChart ()
    {
      window.myLineChart.update();
    };
    </script>

这是我试图更新图表的内容:

function updateChart ()
    {
      myLineChart.update();
    };

共有2个答案

南门展
2023-03-14

答案是,按钮位于HTML中的表单内,这就是它刷新整个页面的原因。
错误示例:

<div class="chart1">
      <canvas id="mychart1" ></canvas>
      <form method="POST">
        <p class="datafilter">Filtrar data:<input type="date" id="datafilter">
        <button type="submit" id="subfilt">FILTRAR</button></p>
        <button type="update" id="update" onclick="updateChart()">UPDATE</button>
      </form>
    </div>

正确的例子:

<div class="chart1">
      <canvas id="mychart1" ></canvas>
      <form method="POST">
        <p class="datafilter">Filtrar data:<input type="date" id="datafilter">
        <button type="submit" id="subfilt">FILTRAR</button></p>
      </form>
      <button type="update" id="update" onclick="updateChart()">UPDATE</button>
    </div>
卢志行
2023-03-14

我不知道你说的“它不断刷新浏览器”是什么意思--update方法只更新图表。它绝不应该刷新整个页面。

但是可以通过将0作为唯一参数传递来防止调用update时出现动画,如文档所示:

有时当图表更新时,您可能不想要动画。为此,您可以调用update,持续时间为0。这将同步呈现图表,而不需要动画。

 类似资料:
  • When webpack-dev-server is running it will watch your files for changes. When that happens it rebundles your project and notifies browsers listening to refresh. To trigger this behavior you need to ch

  • 问题内容: 每当我在.hmtl文件或.js文件中进行代码更改时,浏览器仍会呈现旧代码,而我的新代码更改不会显示在浏览器结果中。 例如,我在.html文件中添加了以下两行代码。 然后,我执行以下操作: 在VS2013中,右键单击我的项目,然后在浏览器(IE或Chrome)中查看。 登录到我的应用程序。 转到相应的页面,我看到了旧的html文件的呈现。我完全看不到新添加的2 div元素。 我什至按下f

  • 我开始使用laravel,每次手动更新浏览器有点繁琐,在此之前,当我只使用html、css、js时,我在VisualStudioCode中得到了LiveServer的帮助。我想找到类似的东西,在node.js中找到了BrowseSync,但它在一个单独的服务器上工作,我需要它在xaamp上工作

  • 问题内容: 我想使用JavaScript禁用浏览器刷新。 当前,我正在使用,并且我不希望在用户刷新浏览器时调用它。 最好的方法是什么? 问题答案: 更新 最近的评论声称这在新的Chrome中不起作用…如jsFiddle所示,并在我的个人网站上进行了测试,此方法从Chrome版本开始仍然有效 顺便说一下,这在jQuery中非常容易: 附带说明:这只会禁用键盘上的f5按钮。要真正禁用刷新,您必须使用服

  • 实际上,在按下我网站中的一个按钮后,我调用了一个引导模式,其中有一个Chart.js,该图表的数据是通过Ajax调用以以下方式加载的 现在我想“实时更新”该图表,但问题显然是通过对该函数执行来更新所有图表数据 虽然我将只更新新数据,因此如果我有一个图表构建为当一个新数据已添加到数据库为17:00/9时,我将只添加新值,或者另一个例子,如果15:00的数据已更改为10,我将只更新标签15:00中设置

  • 问题内容: 我对/ 有问题。我的数据表未刷新/更新。我正在使用,根据代码,一切都很好,并且没有任何错误。我也有一个带有分页的表,这就是为什么我使用动作监听器和按钮“上一个”和“下一个”的原因。我正在从其他函数传递到在is中的类中编码的函数 。问题是我填充了包含表数据的数组,但是表不会更新/刷新它。这是我的代码。谢谢前进。 大编辑 旧代码已删除。我添加了新代码,可以帮助您了解我的问题。希望这会有所帮