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

如何从画布中清除图表,以便无法触发悬停事件?

舒俊雄
2023-03-14

我使用Chartjs来显示线图,这很好:

// get line chart canvas
var targetCanvas = document.getElementById('chartCanvas').getContext('2d');

// draw line chart
var chart = new Chart(targetCanvas).Line(chartData);

但当我试图更改图表的数据时,问题就出现了。我通过使用新数据点创建图表的新实例来更新图表,从而重新初始化画布。

这个很好用。但是,当我将鼠标悬停在新图表上时,如果我恰好经过与旧图表上显示的点对应的特定位置,则仍会触发鼠标悬停/标签,并且旧图表会突然可见。当我的鼠标在这个位置时,它仍然可见,当离开那个点时,它消失了。我不想显示旧的图表。我想把它完全去掉。

在加载新图表之前,我试图清除画布和现有图表。喜欢:

targetCanvas.clearRect(0,0, targetCanvas.canvas.width, targetCanvas.canvas.height);

chart.clear();

但到目前为止,这些都没有奏效。有什么办法能阻止这一切发生吗?

共有3个答案

白学
2023-03-14
var myPieChart=null;

function drawChart(objChart,data){
    if(myPieChart!=null){
        myPieChart.destroy();
    }
    // Get the context of the canvas element we want to select
    var ctx = objChart.getContext("2d");
    myPieChart = new Chart(ctx).Pie(data, {animateScale: true});
}
陈高寒
2023-03-14

几个小时前我也遇到过同样的问题。

“.clear()”方法实际上会清除画布,但(显然)它会使对象保持活动和反应状态。

仔细阅读官方文档,在“高级用法”部分,我注意到方法“.destroy()”,描述如下:

msgstr"使用这个来销毁创建的任何图表实例。这将清除存储到Chart.js中图表对象的任何引用,以及由C附加的任何关联事件侦听器hart.js.”

它确实做到了它声称的,对我来说效果很好,我建议你试试。

蓝慈
2023-03-14

我对此有很大的问题

首先我尝试了.clear(),然后我尝试了.destroy(),并尝试将图表引用设置为空

是什么最终解决了我的问题:删除

我的特定代码(显然有一百万种方法可以做到这一点):

var resetCanvas = function(){
  $('#results-graph').remove(); // this is my <canvas> element
  $('#graph-container').append('<canvas id="results-graph"><canvas>');
  canvas = document.querySelector('#results-graph');
  ctx = canvas.getContext('2d');
  ctx.canvas.width = $('#graph').width(); // resize to parent width
  ctx.canvas.height = $('#graph').height(); // resize to parent height
  var x = canvas.width/2;
  var y = canvas.height/2;
  ctx.font = '10pt Verdana';
  ctx.textAlign = 'center';
  ctx.fillText('This text is centered on the canvas', x, y);
};

 类似资料:
  • 问题内容: 在尝试了复合操作并在画布上绘制图像之后,我现在尝试删除图像并进行合成。我该怎么做呢? 我需要清除画布才能重画其他图像;这可能会持续一段时间,所以我认为每次绘制一个新矩形都不是最有效的选择。 问题答案:

  • 我正在尝试用python、matplotlib、numpy和tkinter创建生活游戏。在用户输入行数、列数和生成活动单元格的概率后,用户将按下“生成”按钮开始游戏。我可以显示第一个画布,但除此之外,程序似乎无法更新画布。更新时(使用while循环),我希望程序首先调用更新画布的函数,然后暂停图形0.5秒,最后清除画布,以便显示下一个更新的画布。我似乎对FigureCanvasTkAgg有最大的问

  • 我正在尝试清除JavaFX中的简单画布。 启动功能 如果用户想要加载游戏,则loadSave布尔变量集为“true” 否则,它会加载新游戏 我真的很感激你的帮助。

  • 我正在写一个基于Object的小2D机器人游戏,所以我把整个游戏绘制在 注册一个< code>OnTouchListener,但是我如何检测球的接触呢? 另一个问题是球是一个简单的物体。如果我有一些不规则的物体,不能用半径或其他东西来描述呢?我是否使用了png的正确“技术”来构建画布控件,或者有没有更好/更简单的方法? 这是我在所有平台(JS,Android,iOS)上遇到的典型问题,我不知道解决

  • 问题内容: 我想知道是否有可能用JS触发CSS HOVER效果,而不必使用其他类… 我尝试使用触发效果,但这不会触发CSS悬停效果。 PS:我做了一个功能,可以帮助用户使用在线CMS。帮助功能通过在图像上四处移动来显示操作方法,以显示操作方法。虚拟光标可以单击内容,显示元素等。但是我希望该虚拟光标也可以触发CSS中设置的:hover效果。 问题答案: 我知道您要做什么,但为什么不简单地这样做: 该

  • 在这里,我得到了一个notaccepted异常,我知道原因是stateMachine.getState()是INITIAL,它不能直接将状态从INITIAL更改为THIRD。 所以我的问题是,我是否可以配置我的statemachine在第一个事件完成时自动触发第二个事件