我有两个并排的图表,左边的是大的,右边的是小的,每个都在自己的容器中.当单击小图表时,我希望图表切换位置,以便小图表移动到左侧的大容器,而大图表移动到右侧的小容器,并且图表应该根据新容器的大小进行调整.这在Chart.js v2.9.4中有效,但在我升级到v4.4.2后,移动容器后图表仍保持原始大小.
以下是一些简单的代码来演示该问题: HTML
<div id='chart-container'>
<div id='big-chart-container'>
<canvas id='chart1'></canvas>
</div>
<div id='small-chart-container'>
<canvas id='chart2'></canvas>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<!--Swapping charts works in chart.js 2-->
<!--<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>-->
CSS
#chart-container{
display: flex;
width: 60vw;
}
#big-chart-container{
width: 60%;
}
#small-chart-container{
width: 30%;
}
JavaScript
var canvas1 = document.getElementById('chart1')
var canvas2 = document.getElementById('chart2')
let bigChartContainer = document.getElementById('big-chart-container');
let smallChartContainer =document.getElementById('small-chart-container');
let data1 = [5,7,6,2,6,8,4,5]
let data2 = [4,8,15,16,23,42]
let labels1 = [...Array(data1.length).keys()]
let labels2 = [...Array(data2.length).keys()]
let bigChartID = 'chart1';
function chartClicked(chartID){
if(bigChartID != chartID){ //if small chart is clicked then swap charts
let smallChart = document.getElementById(chartID)
let bigChart = document.getElementById(bigChartID)
bigChartContainer.appendChild(smallChart)
smallChartContainer.appendChild(bigChart)
bigChartID = chartID
}
}
const bigChart = new Chart(canvas1.getContext('2d'), {
type: 'line',
data: {
labels: labels1,
datasets: [{
label: "Chart 1",
data: data1
}]
},
options: {
onClick: function(){
chartClicked('chart1')
}
}
})
const smallChart = new Chart(canvas2.getContext('2d'), {
type: 'line',
data: {
labels: labels2,
datasets: [{
label: "Chart 2",
data: data2,
borderColor: 'rgb(255, 99, 132)',
}]
},
options: {
onClick: function(){
chartClicked('chart2')
}
}
})
如果我降级到chart.js 2,那么切换图表效果非常好.