<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>chartjs-plugin-trace / sample</title>
    <link rel="stylesheet" type="text/css" href="index.css" />
    <link rel="icon" type="image/ico" href="favicon.ico" />

    <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0/dist/Chart.min.js"></script>
    <script src="../chartjs-plugin-crosshair.js"></script>
  </head>
  <body>
    <div id="header">
      <div class="title">
        <span class="main">chartjs-plugin-crosshair</span>
        <span class="name">Sample</span>
      </div>
      <div class="caption">
        <a href="http://www.chartjs.org">Chart.js</a>
        plugin to draw crosshair lines, interpolate values and zoom
      </div>
      <div class="links">
        <a
          class="btn btn-docs"
          href="/"
        >
          Documentation
        </a>
        <a
          class="btn btn-gh"
          href="https://github.com/abelheinsbroek/chartjs-plugin-crosshair"
        >
          GitHub
        </a>
      </div>
    </div>
    <h3>Basic Example</h3>
    <p>Try dragging to zoom in!</p>
    <div class="chart"><canvas id="chart1"></canvas></div>
    <h3>Linked Charts</h3>
    <div class="split"><canvas id="chart2"></canvas></div>
    <div class="split"><canvas id="chart3"></canvas></div>
    <div class="chart"><canvas id="chart4"></canvas></div>
    <h3>Panning Zoom</h3>
    <p>Use left and right arrows to pan!</p>
    <div class="chart"><canvas id="chart5"></canvas></div>
  </body>

  <script>
    function generateDataset(shift, label, color) {
      var data = [];
      var x = 0;
      while (x < 30) {
        data.push({ x: x, y: Math.sin(shift + x / 3) });
        x += Math.random();
      }
      var dataset = {
        backgroundColor: color,
        borderColor: color,
        showLine: true,
        fill: false,
        pointRadius: 2,
        label: label,
        data: data,
        lineTension: 0,
        interpolate: true
      };
      return dataset;
    }

    var chart1 = new Chart(document.getElementById("chart1").getContext("2d"), {
      type: "scatter",
      options: {
        plugins: {
          crosshair: {
            sync: {
              enabled: false
            }
          }
        },

        tooltips: {
          mode: "interpolate",
          intersect: false,
          callbacks: {
            title: function(a, d) {
              return a[0].xLabel.toFixed(2);
            },
            label: function(i, d) {
              return (
                d.datasets[i.datasetIndex].label + ": " + i.yLabel.toFixed(2)
              );
            }
          }
        }
      },
      data: {
        datasets: [
          generateDataset(0, "A", "red"),
          generateDataset(1, "B", "green"),
          generateDataset(2, "C", "blue")
        ]
      }
    });

    var chart2 = new Chart(document.getElementById("chart2").getContext("2d"), {
      type: "scatter",
      options: {
        tooltips: {
          mode: "interpolate",
          intersect: false,
          callbacks: {
            title: function(a, d) {
              return a[0].xLabel.toFixed(2);
            },
            label: function(i, d) {
              return (
                d.datasets[i.datasetIndex].label + ": " + i.yLabel.toFixed(2)
              );
            }
          }
        }
      },
      data: {
        datasets: [generateDataset(0, "A", "red")]
      }
    });
    var chart3 = new Chart(document.getElementById("chart3").getContext("2d"), {
      type: "scatter",
      options: {
        tooltips: {
          mode: "interpolate",
          intersect: false,
          callbacks: {
            title: function(a, d) {
              return a[0].xLabel.toFixed(2);
            },
            label: function(i, d) {
              return (
                d.datasets[i.datasetIndex].label + ": " + i.yLabel.toFixed(2)
              );
            }
          }
        }
      },
      data: {
        datasets: [generateDataset(1, "B", "green")]
      }
    });
    var chart4 = new Chart(document.getElementById("chart4").getContext("2d"), {
      type: "scatter",
      options: {
        tooltips: {
          mode: "interpolate",
          intersect: false,
          callbacks: {
            title: function(a, d) {
              return a[0].xLabel.toFixed(2);
            },
            label: function(i, d) {
              return (
                d.datasets[i.datasetIndex].label + ": " + i.yLabel.toFixed(2)
              );
            }
          }
        }
      },
      data: {
        datasets: [generateDataset(1, "C", "blue")]
      }
    });

    var chart5 = new Chart(document.getElementById("chart5").getContext("2d"), {
      type: "scatter",
      options: {
        plugins: {
          crosshair: {
            sync: {
              enabled: false
            },
            pan: {
              incrementer: 3 // Defaults to 5 if not included.
            }
          }
        },
        tooltips: {
          mode: "interpolate",
          intersect: false,
          callbacks: {
            title: function(a, d) {
              return a[0].xLabel.toFixed(2);
            },
            label: function(i, d) {
              return (
                d.datasets[i.datasetIndex].label + ": " + i.yLabel.toFixed(2)
              );
            }
          }
        },
        animation: {
          duration: 0
        },

        responsiveAnimationDuration: 0
      },
      data: {
        datasets: [
          generateDataset(0, "A", "red"),
          generateDataset(1, "B", "green"),
          generateDataset(2, "C", "blue")
        ]
      }
    });

    var panZoom = function(e) {
      if (e.keyCode === 37) {
        chart5.panZoom(-5);
      } else if (e.keyCode === 39) {
        chart5.panZoom(5);
      }
    };

    window.addEventListener("keydown", panZoom);
  </script>
</html>