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

Chartjs条形图在使用ajax时悬停时显示旧数据

山煜祺
2023-03-14

我是javascript新手

我有一个使用chart.js创建的条形图。页面加载时一切正常,但当我更改值时,会出现小故障。新数据被引入,但当我将鼠标悬停在上面时,旧数据会显示出来。

 $('#fanbase-overtime-platform').on("change", function() {

$('.global-page-filter-loader').show();
var platform = $(this).val();
var selected_artist = $('#artist-select-list').val();
var requestSimilarArtist = $.ajax({
  url: "{{url('label/artist/compare/overtime/follower')}}",
  method: "POST",
  data: {_token: $('meta[name="csrf-token"]').attr('content'), selected_artist: selected_artist, platform: platform}
});
requestSimilarArtist.done(function( resp ) {
  if(!resp.error) {
    if(resp.result != undefined) {
      var dateArr = [];
      var followerArr = [];
      for (var i = 0; i < resp.result.artists.length; i++) {
        followerArr[i] = [];
        $.each(resp.result.followers[i], function(index, item) {
          if(i == 0) {
            dateArr.push(item.last_date);
          }
          followerArr[i].push(item.follower_value);
        });
      }
      var ctx = $("#fanbase-overtime-line-chart");
      var chartOptions = {
       responsive: true,
       maintainAspectRatio: false,
       legend: {
          position: "bottom"
       },
       hover: {
          mode: "label"
       },
       scales: {
          xAxes: [
             {
                display: true,
                gridLines: {
                   color: "#f3f3f3",
                   drawTicks: false
                },
                scaleLabel: {
                   display: true,
                   labelString: "Month"
                }
             }
          ],
          yAxes: [
             {
                display: true,
                gridLines: {
                   color: "#f3f3f3",
                   drawTicks: false
                },
                scaleLabel: {
                   display: true,
                   labelString: "Value"
                }
             }
          ]
       },
       title: {
          display: true,
          text: "Line Chart - Legend"
       }
      };

      var colors = [
        {
          borderColor: "#e91e63",
          pointBorderColor: "#e91e63"
        },
        {
          borderColor: "#00CCFF",
          pointBorderColor: "#00CCFF"
        },
        {
          borderColor: "#ffc107",
          pointBorderColor: "#ffc107"
        }
      ]
      var arrOfChartData = []
      $.each(resp.result.artists, function(index, item) {
        arrOfChartData.push({
          label: item.name,
          data: followerArr[index],
          fill: false,
          borderColor: colors[index].borderColor,
          pointBorderColor: colors[index].pointBorderColor,
          pointBackgroundColor: "#FFF",
          pointBorderWidth: 2,
          pointHoverBorderWidth: 2,
          pointRadius: 4
        });
      });

      var chartData = {
        labels: dateArr,
        datasets: arrOfChartData
      };
      var config = {
         type: "line",
         options: chartOptions,
         data: chartData
      };
      var lineChart = new Chart(ctx, config);
      lineChart.update();

    }
  }
  $('.global-page-filter-loader').hide();
});


 });

当我更改日期范围并将鼠标悬停在新图表上时,销毁原始数据的最佳方法是什么?非常感谢。

共有2个答案

丁震博
2023-03-14

这是我的工作将图表更改为全局窗口(更改声明)喜欢var lineChartwindow.line图表

声明前销毁图表

       if (window.lineChart){

             window.lineChart.destroy();  

           }
      window.lineChart = new Chart(ctx, config);

希望有帮助

狄河
2023-03-14

我有类似的经历。所以我使用这种方式,在绘制新图表之前破坏以前的图表

var canvasContainer = canvasItem.parent();
var canvasHtml = '<canvas id="'+canvasItem.attr('id')+'"><canvas>';
canvasItem.remove();
$(canvasContainer).append(canvasHtml);

…将图表选项设置为

var options = {
    title:{},
    scalses:{}
}

在你写下你想在图表中使用的选项之后

var ctx = document.getElementById(canvasItem.attr('id')).getContext('2d');
var Chart = new window.Chart(ctx, {
        data:{
        labels:chartdata.date,
        datasets:chartdata.datasets,
        },
        options : options
});

它对我很管用

 类似资料:
  • 我有一个使用chart.js创建的条形图。页面加载时一切正常,但当我使用daterangepicker更改时间范围时,出现了一个小故障。新数据被引入,但当我将鼠标悬停在上面时,旧数据会显示出来。我是javascript新手,希望能得到一些帮助。看起来我需要合并。销毁();不知怎么的,但我不知道怎么做。下面是我的代码片段: 破坏原始数据的最佳方法是什么,以便当我更改日期范围并将鼠标悬停在新图表上时,

  • 当我在图表上移动鼠标时,如何修复图表js错误,使其显示旧数据。 我的Js文件 我可以在图表js中显示JSON响应中的数据,但当我在图表上移动鼠标时,它的问题显示了以前的值。 我曾试图破坏这种方法,但并没有奏效。如何预防这个问题??。

  • 我想绘制INS的收盘价如下,它的工作原理。然后我想在图形上悬停时添加光标。我跟随https://matplotlib.org/3.1.0/gallery/misc/cursor_demo_sgskip.html的演示,这就是我想要的。 但当我将这些行添加到代码中时,它显示值错误。最初我使用历元时间作为x轴,我认为这就是问题所在,所以我将历元时间转换为日期时间,但它仍然不起作用,并且什么也没有绘制。

  • 我正在尝试使用chartJs创建一个堆叠条形图(垂直或水平)。在遵循了他们的文档并尝试了各种解决方案之后,我仍然无法获得要叠加的值。 我创造了一把小提琴https://jsfiddle.net/trig79/oxantepu/1/ 感谢任何关于我哪里出错的指导

  • 我使用Chart.js库绘制条形图,我想显示工具提示不仅在条形图悬停,而且在x轴标签悬停该条形图。我找到了用于配置的方法,但它只允许我访问当前悬停栏的数组,这是没有用的。 那个么,我怎样才能访问鼠标事件,并从那个里获取位置,将其与条形标签的位置进行比较呢?还是有别的办法? 我当前的配置: 它只打印出悬停条数据,但我坚持要想出如何扩展它以满足我需要的行为。

  • 在一个html页面中,我有一个选择菜单(a, b, c, d)和一个条形图(a, b, c, d)。我想做的是在选择菜单中选择的条形图中突出显示相应的条形图。