Chart.js在画布中渲染其轴。在画布下面,我有一个包含控件(在本例中是输入滑块)的div。我想给div添加一个边距(或者操作它),这样div本身(以及其中的控件)就不会与画布对齐,而是与画布中的轴对齐(即因此,下图中的滑块与轴的宽度相同)。有可能做到这一点吗?
的数据
wrrgggsh1#
options: { scales: { y: { afterFit: function (scaleInstance) { scaleInstance.width = 50; // sets the width to 50px } } } }
字符串
const sliderToPercentageWidth = (sliderVal) => { return (50 + (containerWidth - 50) * (sliderVal/100) ) };
型
containerWidth
window.addEventListener("resize", (event) => { containerWidth = container.offsetWidth; });
型所有这些结合在一起给予了下面的代码(also on CodePen):
<div id="container"> <div id="graph"> <canvas id="myChart"></canvas> </div> <input id="width-selector" type="range" value="50"> </div>
#container{ background-color: #ff000020; width: 80vw; height:90vh; } #graph{ height: 70vh; width: 40vw; background-color: #00ff0020; } #width-selector{ width: calc(100% - 50px); margin-left: 50px; }
const sliderToPercentageWidth = (sliderVal) => { return (50 + (containerWidth - 50) * (sliderVal/100) ) }; const rangeInput = document.getElementById("width-selector"); const graph = document.getElementById("graph"); const container = document.getElementById("container"); let containerWidth = container.offsetWidth; // Match the slider width to graph on first render const newWidth = sliderToPercentageWidth(rangeInput.value) graph.style.width = `${newWidth}px`; window.addEventListener("resize", (event) => { containerWidth = container.offsetWidth; }); rangeInput.oninput = () => { const newWidth = sliderToPercentageWidth(rangeInput.value) graph.style.width = `${newWidth}px`; }; // A basic chart // Option for y axis width set const ctx = document.getElementById("myChart"); new Chart(ctx, { type: "bar", data: { labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], datasets: [ { label: "# of Votes", data: [12, 19, 3, 5, 2, 3], borderWidth: 1 } ] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { afterFit: function (scaleInstance) { scaleInstance.width = 50; // sets the width to 50px } } } } });
您可以使用JS来跟踪输入滑块的值,并在它更改时设置图表的CSS样式。这里有一个快速的例子,让你开始,因为我不能看到你正在使用的确切代码。它有非常基本的HTML,CSS,但使用输入值(滑块)来设置使用.style.width的“图形”div的宽度。
.style.width
<div class="container"> <div id="graph"></div> <input id="width-selector" type="range" value="50"> </div>
.container{ background-color: red; width: 50vw; height:70vh; } #graph{ height: 50vh; /* Set the default width to match the input slider value */ width: 50%; background-color:blue; } #width-selector{ width: 100%; }
const rangeInput = document.getElementById("width-selector"); const graph = document.getElementById("graph") rangeInput.oninput = () => { graph.style.width = `${rangeInput.value}%` }
如果您当前的文档与我的示例设置不同,请与我们分享您的代码&我将更新我的示例。
1条答案
按热度按时间wrrgggsh1#
Chart.js Canvas答案
字符串
型
containerWidth
型
所有这些结合在一起给予了下面的代码(also on CodePen):
HTML
型
CSS
型
JS
型
旧的错误答案
您可以使用JS来跟踪输入滑块的值,并在它更改时设置图表的CSS样式。
这里有一个快速的例子,让你开始,因为我不能看到你正在使用的确切代码。
它有非常基本的HTML,CSS,但使用输入值(滑块)来设置使用
.style.width
的“图形”div的宽度。如果您当前的文档与我的示例设置不同,请与我们分享您的代码&我将更新我的示例。