es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Línea vertical al pasar el cursor en ChartJS3.

Quiero dibujar una línea vertical al pasar el cursor en ChartJS3 (3.6 para ser precisos). Esto solía funcionar en ChartJS2:

// Crear línea vertical al pasar el cursor 
export class LineWithLine extends LineController {
  draw() {
    // Llama al método de controlador de línea para dibujar todos los puntos
    super.draw();

// Obtener la información del tooltip activo
const tooltip = this.chart['tooltip'];

if (tooltip._active && tooltip._active.length) {
  var ctx = this.chart.ctx,
    x = tooltip._active[0].element.x,
    topY = this.chart.scales['y'].top,
    bottomY = this.chart.scales['y'].bottom;

  // Dibujar la línea vertical
  ctx.save();
  ctx.setLineDash([1, 1]);
  ctx.beginPath();
  ctx.moveTo(x, topY);
  ctx.lineTo(x, bottomY);
  ctx.lineWidth = 1;
  ctx.strokeStyle = '#424242';
  ctx.stroke();
  ctx.restore();
}


}
}

Pero no está funcionando con 3.6. ¿Alguien ha resuelto esto? No puedo encontrar nada al respecto en su documentación.

EDITAR: También intenté este enfoque.
EDITAR2: ¡Y funciona!

plugins: [{
afterDraw: (chart) => {
if (chart.tooltip?._active?.length) {
const { x } = chart.tooltip._active[0].element;
const yAxis = chart.scales.y;
const { ctx } = chart;
ctx.save();
ctx.beginPath();
ctx.moveTo(x, yAxis.top);
ctx.lineTo(x, yAxis.bottom);
ctx.lineWidth = 1;
ctx.strokeStyle = ‘rgba(0, 0, 255, 0.4)’;
ctx.stroke();
ctx.restore();
}
},
}],

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que has encontrado una solución para dibujar una línea vertical en el hover en ChartJS3 (3.6 para ser precisos). Has intentado dos enfoques y el segundo funcionó.

    Puedes usar el siguiente código para dibujar una línea vertical en hover:

    plugins: [{
          afterDraw: (chart) => {
            if (chart.tooltip?._active?.length) {
              const { x } = chart.tooltip._active[0].element;
              const yAxis = chart.scales.y;
              const { ctx } = chart;
              ctx.save();
              ctx.beginPath();
              ctx.moveTo(x, yAxis.top);
              ctx.lineTo(x, yAxis.bottom);
              ctx.lineWidth = 1;
              ctx.strokeStyle = 'rgba(0, 0, 255, 0.4)';
              ctx.stroke();
              ctx.restore();
            }
          },
        }],
    

Comments are closed.