Javascript 是否更新所有Chart.js实例以应用更改的默认值? 情况:
我目前正在集成一个动态黑暗主题功能,需要根据主题的变化更改默认设置。它看起来像这样(高度简化):Javascript 是否更新所有Chart.js实例以应用更改的默认值? 情况:,javascript,html5-canvas,chart.js,default,Javascript,Html5 Canvas,Chart.js,Default,我目前正在集成一个动态黑暗主题功能,需要根据主题的变化更改默认设置。它看起来像这样(高度简化): 函数变更主题(暗主题=false){ 如果(暗色){ document.body.classList.add('dark-theme'); Chart.defaults.global.defaultFontColor='白色'; }否则{ document.body.classList.remove('dark-theme'); Chart.defaults.global.defaultFontCo
函数变更主题(暗主题=false){
如果(暗色){
document.body.classList.add('dark-theme');
Chart.defaults.global.defaultFontColor='白色';
}否则{
document.body.classList.remove('dark-theme');
Chart.defaults.global.defaultFontColor='黑色';
}
}
问题: 页面上的现有图表不会立即应用更改的默认设置。仅在进行更新时(例如,在工具提示上、更改数据、调整画布大小) 我可以通过调用chart的instance方法手动更新图表。但我无法访问所有现有的图表对象(无法访问创建它们的脚本的作用域),也无法找到全局获取它们的方法
问题:
重现问题的示例: 显示并运行代码段。点击“toggleDarkTheme”按钮,然后点击“#投票数”或其他按钮触发更新
//为主题设置函数
函数更改主题(暗主题=假){
如果(暗色){
document.body.classList.add('dark-theme');
Chart.defaults.global.defaultFontColor='白色';
}否则{
document.body.classList.remove('dark-theme');
Chart.defaults.global.defaultFontColor='黑色';
}
}
改变主题(假);
//切换主题的按钮
设暗色反应=假;
document.getElementById('toggleDarkTheme')。addEventListener('click',()=>{
darkThemeActive=!darkThemeActive;
变更主题(暗色反应性);
});
/*示例图表,假装您没有访问此范围的权限;)*/
{
const ctx=document.getElementById('myChart').getContext('2d');
常量myChart=新图表(ctx{
类型:'bar',
数据:{
标签:[“红色”、“蓝色”、“黄色”、“绿色”、“紫色”、“橙色”],
数据集:[{
标签:“#投票数”,
数据:[12,19,3,5,2,3],
背景颜色:[
"rgba(255,99,132,0.2)",,
“rgba(54162235,0.2)”,
"rgba(255,206,86,0.2)",,
“rgba(751921920.2)”,
“rgba(153102255,0.2)”,
‘rgba(255、159、64、0.2)’
],
边框颜色:[
"rgba(255,99,132,1)",,
“rgba(54162235,1)”,
"rgba(255,206,86,1)",,
"rgba(751921921)",,
"rgba(153102255,1)",,
‘rgba(255、159、64、1)’
],
边框宽度:1
}]
},
选项:{
回答:对
}
});
document.getElementById('TriggermanUpdate')。addEventListener('click',()=>{
myChart.update();
});
}
按钮{
背景色:#eee;
颜色:rgba(0,0,0,0.87);
边界:无;
边界半径:3px;
填充:0.5雷姆;
}
.黑暗主题{
背景色:#212121;
颜色:白色;
}
.黑色主题按钮{
背景色:#212121;
颜色:白色;
}
切换暗线
三锗碘酸盐
您可以使用chart.instances
对象动态循环图表实例。例如:
Chart.helpers.each(Chart.instances, function(instance){
instance.chart.update();
});
我修改了下面的示例,以更新切换函数中的所有图表。您会注意到字体颜色现在随着切换而改变
//为主题设置函数
函数更改主题(暗主题=假){
如果(暗色){
document.body.classList.add('dark-theme');
Chart.defaults.global.defaultFontColor='白色';
}否则{
document.body.classList.remove('dark-theme');
Chart.defaults.global.defaultFontColor='黑色';
}
//强制更新所有图表
Chart.helpers.each(Chart.instances,function(instance){
instance.chart.update();
});
}
改变主题(假);
//切换主题的按钮
设暗色反应=假;
document.getElementById('toggleDarkTheme')。addEventListener('click',()=>{
darkThemeActive=!darkThemeActive;
变更主题(暗色反应性);
});
/*示例图表,假装您没有访问此范围的权限;)*/
{
const ctx=document.getElementById('myChart').getContext('2d');
常量myChart=新图表(ctx{
类型:'bar',
数据:{
标签:[“红色”、“蓝色”、“黄色”、“绿色”、“紫色”、“橙色”],
数据集:[{
标签:“#投票数”,
数据:[12,19,3,5,2,3],
背景颜色:[
"rgba(255,99,132,0.2)",,
“rgba(54162235,0.2)”,
"rgba(255,206,86,0.2)",,
“rgba(751921920.2)”,
“rgba(153102255,0.2)”,
‘rgba(255、159、64、0.2)’
],
边框颜色:[
"rgba(255,99,132,1)",,
“rgba(54162235,1)”,
"rgba(255,206,86,1)",,
"rgba(751921921)",,
"rgba(153102255,1)",,
‘rgba(255、159、64、1)’
],
边框宽度:1
}]
},
选项:{
回答:对
}
});
}
按钮{
背景色:#eee;
颜色:rgba(0,0,0,0.87);
边界:无;
边界半径:3px;
填充:0.5雷姆;
}
.黑暗主题{
背景色:#212121;
颜色:白色;
}
.黑色主题按钮{
背景色:#212121;
颜色:白色;
}
切换暗线