可滚动的x轴与chart.js 2.1.4

时间:2016-06-29 15:10:34

标签: javascript charts chart.js

我有一个有很多要点的折线图 我希望x轴可滚动

我已经看过很少solutions,但是他们正在为旧版本的图表js提供解决方案。

是否有任何选项可以在chart.js版本2中获得可滚动的x轴?

如何在chart.js版本2中获取y轴内容的宽度?
如果没有直接选项来获得可滚动的x轴,我可以复制Y轴区域的内容并在其他画布上绘制图像。

1 个答案:

答案 0 :(得分:0)

我对相关问题的回答将为您提供帮助。在我的示例中,我使Y轴可滚动,但是也可以很容易地将其应用于X轴。

https://stackoverflow.com/a/51282003/10060003

JS小提琴-https://jsfiddle.net/EmmaLouise/eb1aqpx8/3/

我正在使用动画onComplete和onProgress选项重绘要与图表一起滚动的轴。 (请参见https://www.chartjs.org/docs/latest/configuration/animations.html)。

$(function () {
    var rectangleSet = false;

    var canvasTest = $('#chart-Test');
    var chartTest = new Chart(canvasTest, {
        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 () {
                    if (!rectangleSet) {
                        var scale = window.devicePixelRatio;                       

                        var sourceCanvas = chartTest.chart.canvas;
                        var copyWidth = chartTest.scales['y-axis-0'].width - 10;
                        var copyHeight = chartTest.scales['y-axis-0'].height + chartTest.scales['y-axis-0'].top + 10;

                        var targetCtx = document.getElementById("axis-Test").getContext("2d");

                        targetCtx.scale(scale, scale);
                        targetCtx.canvas.width = copyWidth * scale;
                        targetCtx.canvas.height = copyHeight * scale;

                        targetCtx.canvas.style.width = `${copyWidth}px`;
                        targetCtx.canvas.style.height = `${copyHeight}px`;
                        targetCtx.drawImage(sourceCanvas, 0, 0, copyWidth * scale, copyHeight * scale, 0, 0, copyWidth * scale, copyHeight * scale);

                        var sourceCtx = sourceCanvas.getContext('2d');

                        // Normalize coordinate system to use css pixels.

                        sourceCtx.clearRect(0, 0, copyWidth * scale, copyHeight * scale);
                        rectangleSet = true;
                    }
                },
                onProgress: function () {
                    if (rectangleSet === true) {
                        var copyWidth = chartTest.scales['y-axis-0'].width;
                        var copyHeight = chartTest.scales['y-axis-0'].height + chartTest.scales['y-axis-0'].top + 10;

                        var sourceCtx = chartTest.chart.canvas.getContext('2d');
                        sourceCtx.clearRect(0, 0, copyWidth, copyHeight);
                    }
                }
            }
        }
    });