javascript - ChartJS 在 show() 调用时重放图表动画
问题描述
我有一个充满图表的页面,它会自动生成所有可用的图表(因为默认页面是“所有图表”)。其中有一个选择部门标签,它将隐藏除所选部门拥有的图表之外的所有图表。这是我的代码:
$(window).load(function(){
$('#department').change(function(){
active_department($(this).val());
});
function active_department(department){
for(var i = 0; i < dept['namedept'].length; i++){
if(department!='All'){
$('.'+dept['namedept'][i]).hide(500);
} else {
if(typeof rCharts[dept['namedept'][i]] != 'undefined'){
$('.'+dept['namedept'][i]).show(500);
} else {
$('.no-chart-'+dept['namedept'][i]).hide(500);
}
}
}
if(typeof rCharts[department] != 'undefined'){
$('.'+department).show(500);
} else {
$('.no-chart-'+department).hide(500);
}
}
});
我希望每次选择部门时都能重新出现 ChartJS 动画。到目前为止,我已经尝试过 easing、onProgress 和 jQuery animate。没有工作。是否可以重新动画图表?如果是这样,怎么做?
解决方案
从这个答案和Docs中缺乏可用的选项来看,看起来唯一可行的选项是这些黑客:
- 使用 JS 重绘图表
new Chart
或 - 更改一些次要配置,或重新创建图表数据的实例,然后调用该
update()
方法。
eg:通过函数调用数据,当你想让动画发生时,再次调用相同的函数。因为它现在有一个新数组(即使它是相同的数据),所以图表会重新设置动画。
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<button onclick="updateChart()">Update</button>
<canvas id="myChart"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var chartData = {
type: 'line',
data: {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: createDataset()
}
};
var chart = new Chart(ctx, chartData);
function updateChart(){
chartData.data.datasets = createDataset()
chart.update();
}
function createDataset(){
return [{
label: "My First dataset",
backgroundColor: 'rgb(255, 99, 132)',
borderColor: 'rgb(255, 99, 132)',
data: [0, 10, 5, 2, 20, 30, 45],
fill: false
}];
}
//ignore next line, it's to deal with a bug from chartjs cdn on stackoverflow
console.clear();
</script>
推荐阅读
- git - Git - 使用 .gitattributes 强制一致的行尾时的怪异
- javascript - Android Webview JSInterface 与 ReactJS 通信
- javascript - 如何仅调用 ajax 使用 jquery 进行更改的特定字段?
- javascript - JavaScript 模块关键字
- gremlin - 在 AWS Neptune Gremlin Python 中正确处理顶点删除
- java - Eclipse:无法连接到数据库。错误:java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver
- visual-studio - 视觉工作室中未显示 Ironpython 错误
- vba - 解锁多个工作簿,每个工作簿都有自己的密码 (VBA)
- android - 在 Android 中启用展开布局时如何默认显示自定义通知和折叠布局
- python - 假设策略:对于每个“桶”,从桶中抽取一个值