You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态刷新Chart.js数据集背景色适配深色模式切换

问题原因

你初始化Chart实例时,数据集里的backgroundColor存的是代码运行当下读取到的CSS变量静态值,不是和CSS变量联动的动态引用。直接调用myChart.update()时,Chart.js只会读取已缓存的旧配置重绘,不会主动重新拉取CSS变量的最新值,自然不会同步配色。

修复方案

把读取主题色的逻辑抽成可复用方法,在主题切换的回调里先重新读取最新色值、更新到数据集配置,再调用update()触发重绘即可。

修正后的完整JS代码如下,CSS和HTML部分不需要改动:

const labels = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
];

// 抽离公共方法,统一读取当前主题下的配色
const getCurrentThemeColors = () => [
    getComputedStyle(document.documentElement).getPropertyValue('--color1').trim(),
    getComputedStyle(document.documentElement).getPropertyValue('--color2').trim(),
    getComputedStyle(document.documentElement).getPropertyValue('--color3').trim()
]

const data = {
    labels: labels,
    datasets: [{
        label: 'My First dataset',
        data: [29, 45, 26],
        backgroundColor: getCurrentThemeColors()
    }]
};

const config = {
    type: 'bar',
    data: data
};
  
const myChart = new Chart(
    document.getElementById('myChart'),
    config
);
  
  
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
    // 更新数据集的背景色配置为最新主题色
    myChart.data.datasets[0].backgroundColor = getCurrentThemeColors();
    // 触发图表重绘
    myChart.update();
});

如果你的图表还有边框色、坐标轴字体色、网格线颜色等其他跟随主题变化的配置,用同样的逻辑,在切换回调里更新对应配置项后再调用update()就能生效。

内容的提问来源于stack exchange,提问作者levipadre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:18:13