Mi código que no funciona (usé jquery):
$('button').click((function() { var clicks = 0; clicks = clicks + 1; var history = [], last = +new Date(); return function e() { history.push(e.timeStamp - last); console.log(history[history.length - 1]); last = e.timeStamp;} return function c(){ if (clicks == 10000){ alert("10k clicks reached"); alert(history); } } //Tested with (clicks == 1), it would keep on alerting me or wouldn't work at all e(); c(); } ));
HTML
<button>Click me</click>
Cuando hago clic en el botón, no hace nada
Hay alguna manera de arreglarlo?
Esperaba que me alertara una vez que alcanzara una cantidad de clics y exportara la matriz por mí.
Cambió el número máximo de clics a 3 para facilitar las pruebas, siéntase libre de cambiar a 10000.
Dado que queremos contar los clics y los tiempos entre ellos, esas variables deben estar fuera del controlador de clics porque las variables dentro de un controlador se borrarán después de cada ejecución del controlador.
Pruébalo: https://jsbin.com/lodifej/edit?html,js,output
let clicks = 0; const timeBetweenClicks = []; const prevClickTimestamp = []; const clickHandler = () => { const currentTime = Date.now(); const previousClickTime = prevClickTimestamp.length ? prevClickTimestamp[prevClickTimestamp.length - 1] : currentTime; timeBetweenClicks.push(currentTime - previousClickTime); // save current time stamp to calculate time difference the next time button is clicked prevClickTimestamp.push(currentTime); clicks += 1; if (clicks === 3) { alert("3 clicks reached. Time between clicks: " + timeBetweenClicks); // remove event listener $('button').off('click', clickHandler); } }; $('button').click(clickHandler);
Nota
Este código da como resultado un valor 0 para la primera diferencia de tiempo. Por ejemplo, para 3 clics, la salida es [0, 255, 1123]. Si eso no es deseable, se puede eliminar al final usando timeBetweenClicks.shift()
. Además, los valores están en ms
.