Reputation: 371
Problem
I have a Laravel website with multiple charts and a 'nightmode' button. This button turns the page dark and the text light.
The function looks like this:
function darkMode(){
var element = document.getElementsByClassName("day")[0];
element.classList.toggle("night");
if(Chart.defaults.global.defaultFontColor == 'black'){
Chart.defaults.global.defaultFontColor = 'white'
} else {
Chart.defaults.global.defaultFontColor = 'black'
}
}
This function works perfectly except for the following issue: When the button is pressed the new font color only shows when the cursor hovers over the chart.
Steps taken
However I get the error stating:
chart.update is not a function.
Goal
To have the chart text change color when the 'nightmode' button is pressed and for the user to not have to hover over the chart first for the changes to take place.
Extra info
Any tips?
Upvotes: 0
Views: 1411
Reputation: 554
var barChartData = {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'Dataset 1',
backgroundColor: [
window.chartColors.red,
window.chartColors.orange,
window.chartColors.yellow,
window.chartColors.green,
window.chartColors.blue,
window.chartColors.purple,
window.chartColors.red
],
yAxisID: 'y-axis-1',
data: [
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor()
]
}, {
label: 'Dataset 2',
backgroundColor: window.chartColors.grey,
yAxisID: 'y-axis-2',
data: [
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor(),
randomScalingFactor()
]
}]
};
window.onload = function() {
var ctx = document.getElementById('canvas').getContext('2d');
window.myBar = new Chart(ctx, {
type: 'bar',
data: barChartData,
options: {
responsive: true,
title: {
display: true,
text: 'Chart.js Bar Chart - Multi Axis'
},
tooltips: {
mode: 'index',
intersect: true
},
scales: {
yAxes: [{
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
display: true,
position: 'left',
id: 'y-axis-1',
}, {
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
display: true,
position: 'right',
id: 'y-axis-2',
gridLines: {
drawOnChartArea: false
}
}],
}
}
});
};
document.getElementById('changeColor').addEventListener('click', function() {
Chart.defaults.global.defaultFontColor = "#ff0000"
window.myBar.update();
});
<script src="https://www.chartjs.org/samples/latest/utils.js"></script>
<script src="https://www.chartjs.org/dist/2.9.3/Chart.min.js"></script>
<div style="width: 75%">
<canvas id="canvas"></canvas>
</div>
<button id="changeColor">Change To Red Color</button>
Hope this helps.
Upvotes: 1