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

Chart.js - 当光标移动到主画布外时禁用工具提示

如何解决Chart.js - 当光标移动到主画布外时禁用工具提示

我有一个折线图,我像这样设置了工具提示

options: {
        tooltips:{
            mode: 'x',intersect: false,callbacks: {
            footer: function(tooltipItem,data) {
              return 'some text'
            }
          }
        },}

它工作正常。我遇到的问题是,当我将光标移动到主绘图/画布之外的 x 轴刻度时,工具提示仍然出现。我尝试设置 intersect: true 但只有当我直接将鼠标悬停在点上时才会显示工具提示。理想情况下,我希望工具提示在我将鼠标悬停在垂直网格线上时出现(在 intersect:false 时发生),但在我的光标移动到主画布之外时不出现。可能吗?

小提琴:https://jsfiddle.net/dqdqdq/yp47oL9t/47/

解决方法

您可以使用选项中的 onHover 回调来检查鼠标是否在 chartArea 中,如果是,请将工具提示设置为启用,否则禁用工具提示。

您可能还想检查您设置的值是否已经是正确的值,因为它会节省大量不必要的更新

示例(V2):

const updateTooltipShow = (chart,enabled) => {
  chart.options.tooltips.enabled = enabled;
  chart.update();
}

const ctx = document.getElementById('myChart').getContext('2d');

const myChart = new Chart(ctx,{

  type: 'line',data: {
    labels: [1,2,3,4],datasets: [{
        data: [1,backgroundColor: "rgba(153,255,51,0.6)"
      },]
  },options: {
    onHover: function(e,activeElements) {
      const {
        bottom,top,right,left
      } = this.chartArea;
      if (e.x >= left && e.x <= right && e.y <= bottom && e.y >= top) {
        updateTooltipShow(this,true)
      } else {
        updateTooltipShow(this,false)
      }
    },tooltips: {
      mode: 'x',intersect: false,callbacks: {
        footer: function(tooltipItem,data) {
          return 'some text'
        }
      }
    },}

});
<canvas id="myChart"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@0.2.0/dist/chartjs-plugin-datalabels.min.js"></script>

示例(V3):

const updateTooltipShow = (chart,enabled) => {
  chart.options.plugins.tooltip.enabled = enabled;
  chart.update();
}

const ctx = document.getElementById('myChart').getContext('2d');

const myChart = new Chart(ctx,options: {
    onHover: (e,activeElements,chart) => {
      const {
        bottom,left
      } = chart.chartArea;
      if (e.x >= left && e.x <= right && e.y <= bottom && e.y >= top) {
        updateTooltipShow(chart,true)
      } else {
        updateTooltipShow(chart,plugins: {
      tooltip: {
        mode: 'x',callbacks: {
          footer: function(tooltipItem,data) {
            return 'some text'
          }
        }
      },}
  }
});
<canvas id="myChart"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.4.0/chart.js"></script>

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?