Zoom & Pan with Back Button - CanvasJS JavaScript Charts
Zoom & Pan with Back Button
HTML
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<br/><!-- Just so that JSFiddle's Result label doesn't overlap the Chart -->
<div id="chartContainer" style="height: 360px; width: 100%;"></div>
JavaScript
var limit = 1000; //increase number of dataPoints by increasing this
var y = 0;
var data = []; var dataSeries = { type: "line" };
var dataPoints = [];
for (var i = 0; i < limit; i += 1) {
y += (Math.random() * 10 - 5);
dataPoints.push({
x: i - limit / 2,
y: y
});
}
dataSeries.dataPoints = dataPoints;
data.push(dataSeries);
var chart = new CanvasJS.Chart("chartContainer", {
zoomEnabled: true,
zoomType: "xy",
rangeChanged: function(e) {
const opt = e.chart.options;
// Initialize data
if (!opt.axisXMinStack) {
opt.axisXMinStack = [];
opt.axisXMaxStack = [];
opt.axisYMinStack = [];
opt.axisYMaxStack = [];
opt.axisX || (opt.axisX={});
opt.axisY || (opt.axisY={});
}
// Remember each zoom level
if (e.trigger === "zoom") {
opt.axisXMinStack.push(e.axisX[0].viewportMinimum);
opt.axisXMaxStack.push(e.axisX[0].viewportMaximum);
opt.axisYMinStack.push(e.axisY[0].viewportMinimum);
opt.axisYMaxStack.push(e.axisY[0].viewportMaximum);
}
// When asked to reset, use zoom level before this one
if (e.trigger === "reset") {
opt.axisXMinStack.pop();
opt.axisXMaxStack.pop();
opt.axisYMinStack.pop();
opt.axisYMaxStack.pop();
opt.axisX.viewportMinimum = opt.axisXMinStack[opt.axisXMinStack.length-1] || null;
opt.axisX.viewportMaximum = opt.axisXMaxStack[opt.axisXMaxStack.length-1] || null;
opt.axisY.viewportMinimum = opt.axisYMinStack[opt.axisYMinStack.length-1] || null;
opt.axisY.viewportMaximum = opt.axisYMaxStack[opt.axisYMaxStack.length-1] || null;
e.chart.render();
}
},
title:{
text: "Zoom with incremental reset"
},
data: data, // random generator above
});
console.log(chart);
chart.render();