在chartJS和Angular上水平滚动时,使y轴变粘

信息开发

我想在水平滚动时固定y轴位置。

这是一个有效但不使用Angular的示例

$(document).ready(function () {

    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;
    }

    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);
        }
    }

    var chartData = {
        labels: generateLabels(),
        datasets: [{
            label: "Test Data Set",
            data: generateData()
        }]
    };



    $(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 sourceCanvas = chartTest.chart.canvas;
                            var copyWidth = chartTest.scales['y-axis-0'].width;
                            var copyHeight = chartTest.scales['y-axis-0'].height + chartTest.scales['y-axis-0'].top + 10;
                            var targetCtx = document.getElementById("axis-Test").getContext("2d");
                            targetCtx.canvas.width = copyWidth;
                            targetCtx.drawImage(sourceCanvas, 0, 0, copyWidth, copyHeight, 0, 0, copyWidth, copyHeight);

                            var sourceCtx = sourceCanvas.getContext('2d');
                            sourceCtx.clearRect(0, 0, copyWidth, copyHeight);
                            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);
                        }
                    }
                }
            }
        });
        addData(5, chartTest);
    });
});
.chartWrapper {
  position: relative;
}

.chartWrapper > canvas {
  position: absolute;
  left: 0;
  top: 0;
  pointer-events: none;
}

.chartAreaWrapper {
  width: 600px;
  overflow-x: scroll;
}
<script src="https://github.com/chartjs/Chart.js/releases/download/v2.6.0/Chart.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="chartWrapper">
  <div class="chartAreaWrapper">
  <div class="chartAreaWrapper2">
      <canvas id="chart-Test" height="300" width="1200"></canvas>
  </div>
  </div>
  <canvas id="axis-Test" height="300" width="0"></canvas>
</div>

当我在角度示例中使用它时,它不再起作用,轴不再跟随滚动

这是堆积如山的复制品

uminder

在您的StackBlitz中,y轴的截面(矩形)已在目标上正确创建,canvas并已从源移除canvas问题是div水平滚动错误可以通过更改模板和相应的来解决此问题css

请看下面的StackBlitz

UPDATE(动态数据)

如果图表组件通过属性接收动态变化的数据@Input(),则您的组件需要实现OnChange生命周期挂钩。

请参阅以下StackBlitz

请注意,此代码远未优化。您不必简单地在每次数据更改时从头创建图表,而只需更新现有图表上的数据和选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当父级滚动时使元素变粘

来自分类Dev

使页眉变粘并减小页面滚动的大小

来自分类Dev

在包含“增长” UL的DIV上水平滚动

来自分类Dev

网页上水平滚动条的原因

来自分类Dev

如何在div上水平滚动?

来自分类Dev

网站在小型设备上水平滚动

来自分类Dev

当水平滚动移动时,HighStock y轴标签会自行更改

来自分类Dev

Slickgrid:拖动列时可以在网格上水平滚动吗?

来自分类Dev

为什么在Windows上水平移动光标时滚动速度会增加?

来自分类Dev

当那里没有可见内容时,网站会在移动设备上水平向右滚动

来自分类Dev

更改 y 轴(水平)滚动条样式

来自分类Dev

在目标 c 中在 x 轴上水平翻转视频

来自分类Dev

Bootstrap响应表无法在iOS设备上水平滚动

来自分类Dev

在iOS上水平滚动—关闭“画布导航”菜单

来自分类Dev

如何在点击事件上水平滚动数据表?

来自分类Dev

div 中的并排表格加上水平滚动

来自分类Dev

将Android ScrollView滚动到X轴和Y轴

来自分类Dev

iOS 8 AutoLayout滚动视图在iPhone 6 plus上水平滚动

来自分类Dev

在用户滚动特定长度之前,如何使部分变粘

来自分类Dev

粘边栏滚动滞后和无限滚动

来自分类Dev

如何创建带有锁定y轴的水平滚动Chart.js折线图?

来自分类Dev

CSS网格:Y轴滚动时,页眉停留在顶部,但X轴滚动时,标题自然显示

来自分类Dev

CSS网格:Y轴滚动时,页眉停留在顶部,但X轴滚动时,标题自然显示

来自分类Dev

水平滚动和溢出

来自分类Dev

使无线电场变粘

来自分类Dev

反应水平滚动选项卡跳上水龙头?

来自分类Dev

将容器设置为全宽,并且无法在移动设备上水平滚动

来自分类Dev

为什么我们的网站允许在移动屏幕上水平滚动?

来自分类Dev

Amchart x 轴水平滚动条

Related 相关文章

  1. 1

    当父级滚动时使元素变粘

  2. 2

    使页眉变粘并减小页面滚动的大小

  3. 3

    在包含“增长” UL的DIV上水平滚动

  4. 4

    网页上水平滚动条的原因

  5. 5

    如何在div上水平滚动?

  6. 6

    网站在小型设备上水平滚动

  7. 7

    当水平滚动移动时,HighStock y轴标签会自行更改

  8. 8

    Slickgrid:拖动列时可以在网格上水平滚动吗?

  9. 9

    为什么在Windows上水平移动光标时滚动速度会增加?

  10. 10

    当那里没有可见内容时,网站会在移动设备上水平向右滚动

  11. 11

    更改 y 轴(水平)滚动条样式

  12. 12

    在目标 c 中在 x 轴上水平翻转视频

  13. 13

    Bootstrap响应表无法在iOS设备上水平滚动

  14. 14

    在iOS上水平滚动—关闭“画布导航”菜单

  15. 15

    如何在点击事件上水平滚动数据表?

  16. 16

    div 中的并排表格加上水平滚动

  17. 17

    将Android ScrollView滚动到X轴和Y轴

  18. 18

    iOS 8 AutoLayout滚动视图在iPhone 6 plus上水平滚动

  19. 19

    在用户滚动特定长度之前,如何使部分变粘

  20. 20

    粘边栏滚动滞后和无限滚动

  21. 21

    如何创建带有锁定y轴的水平滚动Chart.js折线图?

  22. 22

    CSS网格:Y轴滚动时,页眉停留在顶部,但X轴滚动时,标题自然显示

  23. 23

    CSS网格:Y轴滚动时,页眉停留在顶部,但X轴滚动时,标题自然显示

  24. 24

    水平滚动和溢出

  25. 25

    使无线电场变粘

  26. 26

    反应水平滚动选项卡跳上水龙头?

  27. 27

    将容器设置为全宽,并且无法在移动设备上水平滚动

  28. 28

    为什么我们的网站允许在移动屏幕上水平滚动?

  29. 29

    Amchart x 轴水平滚动条

热门标签

归档