首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用chartjs-plugin-zoom向chartjs的图表添加缩放事件处理程序

使用chartjs-plugin-zoom向chartjs的图表添加缩放事件处理程序
EN

Stack Overflow用户
提问于 2017-06-15 02:15:34
回答 2查看 18.2K关注 0票数 5

chartjs-plugin-zoom是一个用于Chart.js的缩放和平移插件

可以调用chart.resetZoom()以编程方式将缩放重置为默认状态。参见this example on jsfiddle

HTML:

代码语言:javascript
复制
<div class="myChartDiv">
    <canvas id="myChart" width="600" height="400"></canvas>
</div>

<button id="reset_zoom">
    Reset zoom
</button>

JavaScript:

代码语言:javascript
复制
var ctx = document.getElementById("myChart");
var 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]
        }]
    },
    options: {
        pan: {
            enabled: true,
            mode: 'x',
        },
        zoom: {
            enabled: true,                      
            mode: 'x',
        }
    }
});

$('#reset_zoom').click(function(){
    myChart.resetZoom();
});

看起来是这样的:

但是,我不想在一开始就显示重置缩放按钮。相反,我想先隐藏它,然后侦听缩放事件(在chartjs-plugin-zoom事件是鼠标滚轮和触摸屏的按压)来显示它。

因此,问题是,在chartjs中,有没有办法通过chartjs-plugin-zoom向图表添加缩放事件处理程序(轮子和夹点事件)?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-15 03:26:25

不幸的是,您不能将鼠标滚动事件添加到图表中,因为chartjs-plugin-zoom默认情况下会阻止这样做。

但是,您可以使用以下图表插件,它将为您完成工作……

代码语言:javascript
复制
plugins: [{
   beforeDraw: function(c) {
      var reset_zoom = document.getElementById("reset_zoom"); //reset button
      var ticks = c.scales['x-axis-0'].ticks.length; //x-axis ticks array
      var labels = c.data.labels.length; //labels array
      if (ticks < labels) reset_zoom.hidden = false;
      else reset_zoom.hidden = true;
   }
}]

添加此插件,然后添加图表选项。

基本上,chartjs- plugin -zoom的工作方式是,它在鼠标滚动上的ticks数组中删除/添加元素,上面的插件将检查这一点,从此以后相应地显示/隐藏rest缩放按钮。

xᴡᴏʀᴋɪɴɢᴇᴀᴍᴘʟᴇ⧩

代码语言:javascript
复制
var ctx = document.getElementById("myChart");
var 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]
      }]
   },
   options: {
      pan: {
         enabled: true,
         mode: 'x',
      },
      zoom: {
         enabled: true,
         mode: 'x',
      }
   },
   plugins: [{
      beforeDraw: function(c) {
         var reset_zoom = document.getElementById("reset_zoom"); //reset button
         var ticks = c.scales['x-axis-0'].ticks.length; //x-axis ticks array
         var labels = c.data.labels.length; //labels array
         if (ticks < labels) reset_zoom.hidden = false;
         else reset_zoom.hidden = true;
      }
   }]
});

$('#reset_zoom').click(function() {
   myChart.resetZoom();
});
代码语言:javascript
复制
.myChartDiv {
   max-width: 600px;
   max-height: 400px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<script src="https://npmcdn.com/Chart.Zoom.js@0.3.0/Chart.Zoom.min.js"></script>
<div class="myChartDiv">
   <canvas id="myChart" width="600" height="400"></canvas>
</div>
<button id="reset_zoom" hidden>
   Reset zoom
</button>

票数 4
EN

Stack Overflow用户

发布于 2020-04-10 16:57:16

另一种方法是使用缩放插件onZoomComplete事件。

首先,您应该将样式应用于缩放按钮,默认情况下会将其隐藏。

代码语言:javascript
复制
.reset-zoom {
    display: none;
}

和按钮

代码语言:javascript
复制
<button id="reset_zoom" class="reset-zoom">
    Reset zoom
</button>

然后在图表的缩放选项中添加

代码语言:javascript
复制
zoom: {
   enabled: true,
   mode: 'x',
   onZoomComplete: function(myChart) {
         $('#reset_zoom').show();
   }
}

为了在调用resetZoom后再次隐藏缩放按钮,您可以添加

代码语言:javascript
复制
$('#reset_zoom').click(function(){
    myChart.resetZoom(); 
    $('#reset_zoom').hide();
});

因此,每次放大时都会显示“重置缩放”按钮,一旦重置缩放,它就会再次隐藏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44551904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档