|
@@ -115,10 +115,29 @@ function countClicks (x1, y1, x2, y2) {
|
|
|
return counter;
|
|
|
}
|
|
|
|
|
|
+function getClicksInWindow (x1, y1, x2, y2) {
|
|
|
+ const instance = stateObject['heatmap'].instance;
|
|
|
+ const points = instance.getData().data;
|
|
|
+ const list = [];
|
|
|
+ for(let i = 0; i < points.length; ++i) {
|
|
|
+ const point = points[i];
|
|
|
+ if (point.x >= x1 && point.y >= y1) {
|
|
|
+ if (point.x <= x2 && point.y <= y2) {
|
|
|
+ list.push(point);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+}
|
|
|
+
|
|
|
function totalClicks () {
|
|
|
return stateObject['data'].length;
|
|
|
}
|
|
|
|
|
|
+function getData () {
|
|
|
+ return stateObject['data'];
|
|
|
+}
|
|
|
+
|
|
|
function logTransform (logString) {
|
|
|
const data = logString.split("\n")
|
|
|
.filter(v => v.split(',').length > 3)
|
|
@@ -193,49 +212,48 @@ function updateDivText (div, posLeft, posTop, xBottom, yBottom) {
|
|
|
<span style="font-size:14px">Proporção em relação ao total: ${ratio}</span>`;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-export default {
|
|
|
- init,
|
|
|
- updateLogString,
|
|
|
- countClicks,
|
|
|
- totalClicks
|
|
|
+function clicksEuclideanDist (points) {
|
|
|
+ if(points.length <= 1) {
|
|
|
+ return 0;
|
|
|
+ } else if (points.length == 2) {
|
|
|
+ const p1 = points[0];
|
|
|
+ const p2 = points[1];
|
|
|
+ return euclideanDist(p1, p2);
|
|
|
+ } else {
|
|
|
+ let count = 0;
|
|
|
+ points.reduce((p1, p2) => {
|
|
|
+ count += euclideanDist(p1, p2);
|
|
|
+ return p2;
|
|
|
+ });
|
|
|
+ return count;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- var x1, y1, x2, y2;
|
|
|
-var sequencia = 1;
|
|
|
+function calcPixelsPerClick () {
|
|
|
+ const data = getData();
|
|
|
+ const totalPixels = clicksEuclideanDist(data);
|
|
|
+ return totalPixels / totalClicks();
|
|
|
+}
|
|
|
|
|
|
-window.onclick = function(evt) {
|
|
|
- var elemen = document.querySelector(".heatmap-canvas");
|
|
|
- if (sequencia == 1) {
|
|
|
- if (evt.pageX || evt.pageY) {
|
|
|
- x1 = evt.pageX;
|
|
|
- y1 = evt.pageY;
|
|
|
- } else {
|
|
|
- x1 = evt.clientX + document.body.scrollLeft + elemen.scrollLeft;
|
|
|
- y1 = evt.clientY + document.body.scrollTop + elemen.scrollTop;
|
|
|
- }
|
|
|
- x1 -= elemen.offsetLeft;
|
|
|
- y1 -= elemen.offsetTop;
|
|
|
- sequencia ++;
|
|
|
- } else {
|
|
|
- if (evt.pageX || evt.pageY) {
|
|
|
- x2 = evt.pageX;
|
|
|
- y2 = evt.pageY;
|
|
|
- } else {
|
|
|
- x2 = evt.clientX + document.body.scrollLeft + elemen.scrollLeft;
|
|
|
- y2 = evt.clientY + document.body.scrollTop + elemen.scrollTop;
|
|
|
- }
|
|
|
- x2 -= elemen.offsetLeft;
|
|
|
- y2 -= elemen.offsetTop;
|
|
|
-
|
|
|
- var width = Math.abs(x2 - x1);
|
|
|
- var height = Math.abs(y2 - y1);
|
|
|
- sequencia = 1;
|
|
|
+function calcPixelsPerClickInArea () {
|
|
|
+ if(div == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ const data = getClicksInWindow(posLeft, posTop, xBottom, yBottom);
|
|
|
+ const totalPixels = clicksEuclideanDist(data);
|
|
|
+ return totalPixels / countClicks(posLeft, posTop, xBottom, yBottom);
|
|
|
+}
|
|
|
|
|
|
+function euclideanDist (p1, p2) {
|
|
|
+ return Math.sqrt(Math.pow(p1.x-p2.x, 2) + Math.pow(p1.y-p2.y, 2));
|
|
|
+}
|
|
|
|
|
|
- $('#line-heatmap-canvas').append($('<div style="position: absolute; border: 1px solid green; top: '+(y1 - 580)+'px; left: '+x1+'px; width: '+width+'px; height: '+height+'px; "></div>'));
|
|
|
-
|
|
|
- }
|
|
|
+export default {
|
|
|
+ init,
|
|
|
+ updateLogString,
|
|
|
+ countClicks,
|
|
|
+ totalClicks,
|
|
|
+ getData,
|
|
|
+ calcPixelsPerClick,
|
|
|
+ calcPixelsPerClickInArea
|
|
|
}
|
|
|
- */
|