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();