javascript - 是否可以在图表 js 中使用 mouseenter 和 mouseleave 事件?

标签 javascript jquery charts chart.js pie-chart

现在我在每个饼图中使用 onHover 来添加一些比例/缩放,但我想使用 mouseenter 和 mouseleave。因此,在 mouseenter 上,每个饼图都会添加一些比例/缩放,而在 mouseleave 上,我希望它恢复到原来的状态。

mouseenter-mouseleavemouseover-mouseout 都可以。

这是代码笔: https://codepen.io/graydirt/pen/NWNZNyQ

谢谢大家!

var ctx = document.getElementById('chartPie').getContext('2d');
var myChart = new Chart(ctx, {
    type: 'pie',
    data: {
        labels: ['Red', 'Blue', 'Green'],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 20],
            backgroundColor: [
                'red',
                'blue',
                'green'
            ],
          datalabels: {
            color: '#000'
          }
        }]
    },
    options: {
        legend: {
          display: false            
        },
      layout: {
        padding: 5
      },
        onHover: function (evt, elements) {
          let segment;
          if (elements && elements.length) {
            segment = elements[0];
            this.chart.update();
            selectedIndex = segment["_index"];
            segment._model.outerRadius += 5;
          } else {
            if (segment) {
              segment._model.outerRadius -= 5;
            }
            segment = null;
          }
      }
    }
});
    .chart-pie {
      width: 400px;
      height: 400px;
      margin: auto;
    } 
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@0.7.0"></script>
<div class="container p-4">
      <div class="chart-pie position-relative">
      <canvas id="chartPie"></canvas>
    </div> 
</div>

最佳答案

您的代码已设计为在鼠标移出时返回到原始大小,但您有一个细微的错误。

您需要在图表 之外定义 变量。保存对段的引用后,将触发 mouseout 事件,并且 onHover 处理程序会将饼图返回到其原始大小。

请看下面的例子:

let segment;
var ctx = document.getElementById('chartPie').getContext('2d');
var myChart = new Chart(ctx, {
  type: 'pie',
  data: {
    labels: ['Red', 'Blue', 'Green'],
    datasets: [{
      label: '# of Votes',
      data: [12, 19, 20],
      backgroundColor: [
        'red',
        'blue',
        'green'
      ],
      datalabels: {
        color: '#000'
      }
    }]
  },
  options: {
    legend: {
      display: false
    },
    layout: {
      padding: 5
    },
    onHover: function(evt, elements) {
      if (elements && elements.length) {
        segment = elements[0];
        this.chart.update();
        selectedIndex = segment["_index"];
        segment._model.outerRadius += 5;
      } else {
        if (segment) {
          segment._model.outerRadius -= 5;
        }
        segment = null;
      }
    }
  }
});
.chart-pie {
  width: 400px;
  height: 400px;
  margin: auto;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@0.7.0"></script>
<div class="container p-4">
  <div class="chart-pie position-relative">
    <canvas id="chartPie"></canvas>
  </div>
</div>

关于javascript - 是否可以在图表 js 中使用 mouseenter 和 mouseleave 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64151568/

相关文章:

javascript - 如何创建带有滚动背景图像的可滚动文本区域?

javascript - 如何向 Raphael.js 对象添加阴影?

javascript - 查看选择了哪个选项

javascript - Elfinder如何自定义菜单

charts - 如何使用 Three.js 创建 3D 饼图?

charts - 如何调整 GraphViz 集群的边距?

javascript - 通过 API 改变数据

javascript - Thymeleaf 值发送 angularJS ng-onclick 方法

asp.net - 当 jQuery 处理一个表单在另一个表单内时发生错误

php - 如何在 php 中从 mysql 数据库生成图形和图表