Chart.js 对单个图表进行动态类型切换时显示错误解决方案

博客提及2019独角兽企业重金招聘Python工程师标准,还讲述了图标操作问题。实例化线型图标后,通过click事件更改datasets.type值会出现瞬移效果,解决办法是在渲染新图标前销毁旧图表。

假设第一步实例化了一个 线型 图标

var charts = new Chart(document.getElementById("myChart").getContext('2d'), {
        type   : 'bar',
        data   : {
            labels  : ['第1天' , '第2天' , '第3天' , 第4天],
            datasets : [
                {
                    label          : "粉丝数",
                    fill           : false,
                    backgroundColor: 'rgba(40,209,41,0.2)',
                    borderColor    : 'rgba(40,209,41,1)',
                    data           : [1 , 2 , 3 , 4],
                    yAxisID        : 'OD',
                    borderWidth    : 1,
                }
            ]
        },
        options: {
            scales: {
                yAxes: [{
                    id       : "OD",
                    type     : 'linear',
                    ticks    : {
                        beginAtZero: true
                    },
                    gridLines: {
                        drawOnChartArea: false
                    }
                }
                ]
            }
        }
    });

第二步当你在通过click事件更改datasets.type值时,就会出现瞬移效果....具体请自行检验

$('a').click(function(){
    charts.data.datasets[0].type = 'line';
    charts.update();
})

解决办法:渲染新的图标之前,销毁掉旧的图表

var charts = null;
function render(){
    if(charts){
        charts.destroy();
    }
    charts = new Chart(document.getElementById("myChart").getContext('2d'), {
        type   : 'bar',
        data   : {
            labels  : ['第1天' , '第2天' , '第3天' , 第4天],
            datasets : [
                {
                    label          : "粉丝数",
                    fill           : false,
                    backgroundColor: 'rgba(40,209,41,0.2)',
                    borderColor    : 'rgba(40,209,41,1)',
                    data           : [1 , 2 , 3 , 4],
                    yAxisID        : 'OD',
                    borderWidth    : 1,
                }
            ]
        },
        options: {
            scales: {
                yAxes: [{
                    id       : "OD",
                    type     : 'linear',
                    ticks    : {
                        beginAtZero: true
                    },
                    gridLines: {
                        drawOnChartArea: false
                    }
                }
                ]
            }
        }
    });
}
render();

 

转载于:https://my.oschina.net/colinadmin/blog/3052581

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值