Kév*_*run 6 javascript charts chart.js
我有问题要让 chart.js 折线图对高度和宽度做出响应。
请参阅示例它应该如何工作:
这是我的代码:
var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
var lineChartData = {
labels : ['January','February','March','April','May','June','July'],
datasets : [
{
label: 'My First dataset',
labelColor : '#fff',
fontColor : '#fff' ,
backgroundColor : 'rgba(220,220,220,0.2)',
borderColor : 'rgba(220,220,220,1)',
pointBackgroundColor : 'rgba(220,220,220,1)',
pointBorderColor : '#fff',
data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
}
]
}
var options = {
maintainAspectRatio: false,
legend: {
display: false,
},
scales: {
xAxes: [{
gridLines: {
display: false,
color: '#03A5C5',
lineWidth: 8,
},
ticks: {
fontColor: "white",
},
}],
yAxes: [{
gridLines: {
display: false,
color: '#03A5C5',
lineWidth: 8,
},
ticks: {
fontColor: "white",
beginAtZero: true,
}
}]
}
};
var ctx = document.getElementById('canvas-1');
var chart = new Chart(ctx, {
responsive: true,
type: 'line',
data: lineChartData,
options: options
});
Run Code Online (Sandbox Code Playgroud)
小智 8
.chart-container {
position: relative;
margin: auto;
height: 80vh;
width: 80vw;
}
Run Code Online (Sandbox Code Playgroud)
<div class="chart-container">
<canvas id="canvas"></canvas>
</div>
Run Code Online (Sandbox Code Playgroud)
maintainAspectRatio
设置为 false:options: {
maintainAspectRatio: false,
responsive: true,
...
}
Run Code Online (Sandbox Code Playgroud)
小智 3
从Chart.js 的文档来看,建议将 canvas 包装到容器 div 中并更改容器的宽度/高度。但基本上它是通过给定的宽度或高度来改变的。
从lannymcnie找到了一个更灵活的自定义解决方案,可用于任何画布响应:
var stage = new createjs.Stage("canvas");
var c = new createjs.Shape();
c.graphics.f("#f00").dc(0,0,50); // Drawn a 100x100 circle from the center
var t = new createjs.Text("Resize the browser/frame to redraw", "24px Arial bold", "#000");
t.x = t.y = 20;
stage.addChild(c, t);
window.addEventListener("resize", handleResize);
function handleResize() {
var w = window.innerWidth-2; // -2 accounts for the border
var h = window.innerHeight-2;
stage.canvas.width = w;
stage.canvas.height = h;
//
var ratio = 100/100; // 100 is the width and height of the circle content.
var windowRatio = w/h;
var scale = w/100;
if (windowRatio > ratio) {
scale = h/100;
}
// Scale up to fit width or height
c.scaleX= c.scaleY = scale;
// Center the shape
c.x = w / 2;
c.y = h / 2;
stage.update();
}
handleResize(); // First draw
Run Code Online (Sandbox Code Playgroud)
html, body {
padding: 0; margin: 0;
overflow:hidden;
}
canvas {
border: 1px solid #f00;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://code.createjs.com/easeljs-0.8.2.min.js"></script>
<canvas id="canvas" width="800" height="600"></canvas>
Run Code Online (Sandbox Code Playgroud)