Ich habe Probleme, das richtige Setup zu finden, um ein ChartJS Balkendiagramm zu haben, das eine feste Leinwandhöhe hat, aber die Breite overflow-x zulässt. Ich habe hier ein Beispiel gefunden ... http://jsfiddle.net/mbhavfwm/, das ChartJS 1.0 verwendet, aber ich verwende ChartJS 2.6. Also habe ich ein anderes Beispiel hier gefunden, das ChartJS 2 verwendet, aber dieses Beispiel zeigt das Diagramm, das mit nur wenigen Werten gerendert wird, und dann ADDS mehr mit JavaScript, was dann dazu führt, dass die Breite überläuft. Nicht ganz das Gleiche.ChartJS 2.6 - Balkendiagramm feste Höhe scrollbar-X
Mein Problem ist, ich kann nicht herausfinden, wie Sie das Diagramm in der festen Höhe mit allen Daten, die bereits drin sind, aber nicht versuchen, Leinwand auf die Breite des übergeordneten Containers zu beschränken. Ich möchte, dass es überläuft.
Hier ist was ich bisher habe. https://jsfiddle.net/fed79b7t/
HTML
<div class="chartWrapper">
<div class="chartAreaWrapper">
<canvas id="chart-FuelSpend" height="300" width="1200"></canvas>
</div>
<canvas id="axis-FuelSpend" height="300" width="0"></canvas>
</div>
CSS
.chartWrapper {
position: relative;
}
.chartWrapper > canvas {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
}
.chartAreaWrapper {
width: 600px;
overflow-x: scroll;
}
JAVASCRIPT
function generateLabels() {
var chartLabels = [];
for (x = 0; x < 100; x++) {
chartLabels.push("Label" + x);
}
return chartLabels;
}
function generateData() {
var chartData = [];
for (x = 0; x < 100; x++) {
chartData.push(Math.floor((Math.random() * 100) + 1));
}
return chartData;
}
var chartData = {
labels: generateLabels(),
datasets: [{
label: "Test Data Set",
data: generateData()
}]
};
$(function() {
var canvasFuelSpend = $('#chart-FuelSpend');
var chartFuelSpend = new Chart(canvasFuelSpend, {
type: 'bar',
data: chartData,
maintainAspectRatio: false,
responsive: true,
options: {
tooltips: {
titleFontSize: 0,
titleMarginBottom: 0,
bodyFontSize: 12
},
legend: {
display: false
},
scales: {
xAxes: [{
ticks: {
fontSize: 12,
display: false
}
}],
yAxes: [{
ticks: {
fontSize: 12,
beginAtZero: true
}
}]
},
animation: {
onComplete: function() {
var sourceCanvas = chartFuelSpend.chart.canvas;
var copyWidth = chartFuelSpend.scales['y-axis-0'].width - 10;
var copyHeight = chartFuelSpend.scales['y-axis-0'].height + chartFuelSpend.scales['y-axis-0'].top + 10;
var targetCtx = document.getElementById("axis-FuelSpend").getContext("2d");
targetCtx.canvas.width = copyWidth;
targetCtx.drawImage(sourceCanvas, 0, 0, copyWidth, copyHeight, 0, 0, copyWidth, copyHeight);
}
}
}
});
});
Also, mein Ziel ist es, das Diagramm die vollen 1200 Pixel wie durch die Leinwandbreite definiert zu haben, aber für das Container-div nur die 600 Pixel Menge, wo ich den Container scrollen kann, um den Rest des Diagramms zu sehen, während das Y zu halten -Achse an Ort und Stelle.
Kann jemand etwas Licht auf das werfen, was ich falsch mache? Was vermisse ich?
Vielen Dank !!!!!
Vielen Dank, wie ich sehen kann, wie ich dies verwenden kann, um Daten zum Diagramm hinzuzufügen, so dass es scrollbar ist. Die Menge der Daten, die ich hinzufügen würde, könnte jedoch Hunderte von Spalten umfassen. Wenn Sie sich Ihr Beispiel ansehen und den an die addData-Methode übergebenen Wert auf 100 oder mehr setzen, wird das Diagramm in der Höhe wachsen, was ich nicht möchte. Die Höhe muss fest bleiben. Irgendwelche Ideen? – Phil
Ich hatte gehofft, ich könnte maxTicksLimit auf die Yaxis setzen, um die Anzahl der Ticks zu begrenzen und vielleicht verhindern, dass die Höhe wächst, aber kein Glück. Es wächst immer noch mit den mehr Daten, die ich hinzufüge. – Phil
Ja, scheint seltsam, wenn Sie console.log (chart.height) in der for-Schleife innerhalb von addData() sagt es sogar die Höhe der Leinwand bleibt die gleiche: S. Ich kann mir nur vorstellen, dass es sich um ein Rendering-Problem mit Chart JS handelt, das dazu führt, dass der Inhalt des Canvas über das hinausgeht, was er eigentlich sein sollte. – DibsyJr