【问题标题】:Line chart Change background color of shaded region on hover (Chartjs)折线图在悬停时更改阴影区域的背景颜色(Chartjs)
【发布时间】:2021-03-25 15:15:51
【问题描述】:

我有一个折线图(chartJs),我想在悬停时更改阴影区域的背景颜色。我在下面尝试过:

const data = {
  labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
  datasets: [
    {
      data: [12, 1, 4, 3, 5, 2, 3],
      pointHoverRadius: 5,
      **backgroundColor: "blue",**
      borderWidth: 5,
      **hoverBackgroundColor: "red",** --> this instead changes the color of point on hover.
    }
  ]
};

其他配置(扩展折线图):

options: {
        tooltips: {
          enabled: false,
          intersect: false,
          mode: 'index',
        },
        events: ['mousemove', 'mouseout', 'touchstart', 'touchmove'],
        hover: {
          mode: 'index',
          intersect: false,
        },

我想将蓝色阴影区域的颜色更改为红色。

【问题讨论】:

  • 嘿,你能不能把它放在 codepen 中,这样我们就可以更好地查看它并尝试它来帮助你
  • 我应该在数据集上使用填充,但当我停止悬停一个点时,它应该立即变回蓝色。
  • 我阅读了一些文章和 Github 问题,在花了几个小时来获得领先之后,这在 Chart.js 中实际上是不可能的,但我已经用一些不同的方法回答了这个问题,希望对您有所帮助,请接受并投票,以便其他人快速解决此问题

标签: javascript chart.js chartjs-2.6.0


【解决方案1】:

这里是 stackblitz link,对您的代码进行了更改,它已经上线

Chart.js 尚未提供任何属性或方法来更改悬停时折线图下方区域的颜色(具体而言)。

但是您可以通过在悬停时重新渲染画布来通过其他方法实现此目的,如果您有自己的自定义钩子,这可能会很顺利,(这是实现您想要的东西的一种骇人听闻的方式,它可以工作!! !但我个人不会推荐这个)

这里是解释

  1. 我添加了一种状态,它会在悬停时切换为真假

    const [ isHover, hoverToggle ] = useState(false)

  2. 我已经在 App 函数中移动了 const 数据

  3. 选择背景颜色来添加这个条件

    backgroundColor: isHover ? "red" : "blue"
    
  4. 然后在 onHover 事件中我添加了两个条件

一)

if ( event.type === "mousemove" && !isHover ) {
    hoverToggle(true);
}

b)

if ( event.type === "mouseout" ||
     event.type === "mouseleave" ||
     event.type === "mouseup"
   ) {
        hoverToggle(false);
     }
  1. 并且最重要的部分在 useEffect 的数组中传递 isHover,因此它将在 isHover 切换
  2. 时被撤销

我个人推荐 d3.js 对于这种类型的要求,它有点复杂,但你可以在图表中得到你想要的任何东西。

【讨论】:

  • 基于状态切换会导致图表重新渲染。
  • 目前,Chart.js 没有提供任何改变悬停时阴影区域颜色的功能
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多