gpt4 book ai didi

javascript - ChartJS 2.6 - 条形图固定高度可滚动-X

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:50 24 4
gpt4 key购买 nike

我在试图找出正确的设置来拥有一个具有固定 Canvas 高度但允许宽度溢出x的ChartJS条形图时遇到了麻烦。我在这里找到了一个例子... http://jsfiddle.net/mbhavfwm/它使用 ChartJS 1.0,但我使用的是 ChartJS 2.6。所以,我在这里找到了另一个例子http://jsfiddle.net/jmpxgufu/它使用 ChartJS 2,但此示例显示仅使用几个值渲染的图表,然后使用 javascript 添加更多值,这会导致宽度溢出。不太一样。

我的问题是我无法弄清楚如何使图表在其中包含所有数据的情况下以固定高度渲染,但不尝试将 Canvas 限制为父容器的宽度。我希望它溢出。

这是我到目前为止所拥有的。 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);
}
}
}
});
});

所以,我的目标是让图表具有 Canvas 宽度定义的完整 1200 像素,但容器 div 仅显示 600 像素量,我可以滚动容器以查看图表的其余部分,同时保持Y 轴就位。

任何人都可以阐明我做错了什么吗?我错过了什么?

谢谢!!!!

最佳答案

这似乎与您在 Canvas 周围缺少包装器有关。这是你的 fiddle 的更新版本。我添加了一个名为 addData函数,它接受您要添加的新条目的数量以及 chart 变量。它并没有想象的那么好(因为我不是 100% 确定你想如何添加新数据),但它是一个很好的起点。诀窍是不要初始化包含所有数据图表,您想要创建图表,然后添加到它以扩展 Canvas ,否则初始渲染将适合该宽度的所有数据

https://jsfiddle.net/qmqmg82z/3/

其他 JavaScript 代码:

function addData(numData, chart){
for (var i = 0; i < numData; i++){
chart.data.datasets[0].data.push(Math.random() * 100);
chart.data.labels.push("Label" + i);
var newwidth = $('.chartAreaWrapper2').width() +60;
$('.chartAreaWrapper2').width(newwidth);
}
}

然后在页面加载函数的末尾(或您想要添加新数据的任何位置)添加此函数调用:

addData(5, chartFuelSpend);

但请记住,这将需要您想要添加的数据和图表实例。

和 HTML:

<div class="chartWrapper">
<div class="chartAreaWrapper">
<div class="chartAreaWrapper2">
<canvas id="chart-FuelSpend" height="300" width="1200"></canvas>
</div>
</div>
<canvas id="axis-FuelSpend" height="300" width="0"></canvas>
</div>

我猜问题是因为您所拥有的单个包装器的宽度随着图表而变化,这意味着水平滚动没有变化应用后,外部包装器具有固定的宽度,而内部包装器和 Canvas 可以扩展。

关于javascript - ChartJS 2.6 - 条形图固定高度可滚动-X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44724937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com