微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何停止chartjs缩放超过可见点?

如何解决如何停止chartjs缩放超过可见点?

如果所选区域没有点,我可以限制chartjs停止缩放吗?请找到下面的图片

enter image description here

如您所见,xaxis 上的两个点之间有一个月的差距,如果我尝试放大那里,它会一直持续下去。 找到下面的图片

enter image description here

我不希望它发生。当用户尝试放大某些点时,我希望图表停止在这两个点上放大。一个在最左边,另一个在最右边。

我的图表配置如下:

scales: {
                    yAxes: [
                        {
                            id: 'yAxis',ticks: {
                                autoSkip: true,maxTicksLimit: 10,beginAtZero: true,},],xAxes: [
                        {
                            distribution: 'linear',type: "time",time: {
                                min: range_min.getTime(),max: range_max.getTime(),unit: "day",unitStepSize: 1,displayFormats: {
                                    day: '\nDD/MM/YYYY hh:mm a\n'
                                },id: 'xAxis',}
                        },pan: {
                    enabled: false,mode: "x",speed: 1,threshold: 1,zoom: {
                    enabled: true,drag: true,sensitivity: 0.5,rangeMax: {
                        x: end_date,rangeMin: {
                        x: start_date,}
                },

解决方法

如果有人遇到同样的问题,我找到了解决方案。缩放后,我们可以通过在 onZoom 函数中覆盖其原始缩放功能,将图表设置为其最近的左右点。请找出答案。

         zoom: {
                    enabled: true,drag: true,sensitivity: 0.5,mode: "x",threshold: 0,rangeMax: {
                        x: end_date,},rangeMin: {
                        x: start_date,onZoom: function () {
                        debugger
                        console.log("zoom");
                        var leftEnd = myChartRef.current.chartInstance.getDatasetMeta(0).dataset._scale.chart.scales['xAxis']._table[0].time;
                        var rightEnd = myChartRef.current.chartInstance.getDatasetMeta(0).dataset._scale.chart.scales['xAxis']._table[1].time;

                        var labels = myChartRef.current.chartInstance.chart.config.data.labels


                        var closestleft = labels.reduce(function (prev,curr) {
                            return (Math.abs(curr - leftEnd) < Math.abs(prev - leftEnd) ? curr : prev);
                        });
                        var closestRight = labels.reduce(function (prev,curr) {
                            return (Math.abs(curr - rightEnd) > Math.abs(prev - rightEnd) ? curr : prev);
                        });
                        myChartRef.current.chartInstance.options.scales.xAxes[0].time.min = closestleft
                        myChartRef.current.chartInstance.options.scales.xAxes[0].time.max = closestRight
                        myChartRef.current.chartInstance.update()

                        console.log(leftEnd)
                        console.log(rightEnd)
                    }
                },

点赞!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。