Quite good looking graph derived from d3.js http://c3js.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.6 KiB

///<reference path="http://localhost/cockpit/js/playground/utils.js"></script>
var chart;
function refresh() {
if (suspendRefresh)
return;
chart.load({
columns: [
["Value"].concat(zoom(column, currentZoom, "t=>Math.round(t.avg())".toLambda())),
["xColumn"].concat(zoom(xColumn, currentZoom, "t=>t[0]".toLambda())),
]
});
}
function getChart() {
return chart;
}
function main() {
var last = 0;
var max = 10000;
var column = Array.generate(max, function (i) {
return last += Math.randomInt(-10, 10);
});
var xColumn = Array.generateNumbers(0, max);
var options = {
bindto: "#divChart",
//transition: { duration: 0 },
data: {
columns: [
["Value"].concat(column),
["x"].concat(xColumn),
],//column
type: "line",
x: "x"
},
zoom2: {
enabled: true,
//reducers: {
// col: "t=>Math.round(t.avg())".toLambda(),
// xColumns: "t=>t[0]".toLambda()
//}
}
};
chart = c3ext.generate(options);
var deltaY = 0;
var leftRatio = 0;
var el = $("#divChart");
var timer = new Timer(doZoom);
el.mousewheel(function (e) {
deltaY += e.deltaY;
leftRatio = (e.offsetX - 70) / (e.currentTarget.offsetWidth - 70);
console.log({ "e.offsetX": e.offsetX, "e.currentTarget.offsetWidth": e.currentTarget.offsetWidth, leftRatio: leftRatio });
timer.set(150);
e.preventDefault();
//if(e.deltaY>0)
// chart.zoom2.zoomIn();
//else if(e.deltaY<0)
// chart.zoom2.zoomOut();
//console.log(e.deltaX, e.deltaY, e.deltaFactor);
});
window.setInterval(refreshStatus, 1000);
function refreshStatus() {
var zoomInfo = chart.zoom2.getZoom();
var info = {
reduced:chart.zoom2.maxItems(),
actual:(zoomInfo.currentZoom[1]-zoomInfo.currentZoom[0]),
range:zoomInfo.currentZoom[0] + "-" + zoomInfo.currentZoom[1],
total: zoomInfo.totalItems
};
$("#status").text(JSON.stringify(info, null, " "));
}
function doZoom() {
if (deltaY != 0) {
var maxDelta = 10;
var multiply = (maxDelta + deltaY) / maxDelta;
//var factor = chart.zoom2.factor()*multiply;
//factor= Math.ceil(factor*100) / 100;
console.log({ deltaY: deltaY, multiply: multiply });
chart.zoom2.zoomAndPanByRatio(multiply, leftRatio);//0.5);//leftRatio);
deltaY = 0;
}
}
};