2017-08-21 2 views
-3

Alles, was ich versuche ist, eine Zahl zu erhöhen, die in einer Box mit 1 angezeigt wird, und dies alle 100 ms zu tun, solange die Maus gedrückt ist. Die Funktion wird ausgeführt, aber niemals mehr als einmal, egal wie lange die Maus gedrückt gehalten wird. Es erhöht die Variable nur jedesmal um 1, wenn ein mousedown -Ereignis für dieses Element vorliegt, und ich kann das in der Box sehen, während ich sehen wollte, dass die Zahl schnell ansteigt, solange die Maus unten bleibt. Gibt es Code für das MouseUp-Ereignis, das das MouseDown-Ereignis daran hindern würde, die Funktion in setTimeout weiter auszuführen oder gibt es eine Regel, die ich vermisse? Seltsam.SetTimeout wird nur einmal beim Mousedown ausgeführt

var mouseDownCount = 0; 

$("#addButton").mousedown(function() { startMouseCount(); }); 

function startMouseCount() { 
    $("mouseCount").html(mousedownCount) 

    mdcTimer = window.setTimeout(function() { 
    mousedownCount++; 
    $("#mouseCount").html(mousedownCount); 
    }, 100); 

    return false; 
} 
+3

SetTimeout nicht von Natur aus zu wiederholen. setInterval tut – Taplar

+0

Verwenden Sie setInterval für diesen Job –

+0

Oder rufen Sie die gleiche Funktion rekursiv. Ja, du hast recht, das habe ich vermisst. Kann jemand das als Antwort geben, damit ich es als akzeptiert markieren kann? Ich habe gerade eine Zeile hinzugefügt, wo es sich selbst nennt und es funktioniert. Ich habe andere Funktionen, die es anderswo anhalten, so dass es sich nicht selbst stoppen muss. – Bobh

Antwort

0

Ich denke, Sie dies wünschen können:

var mouseDownCount = 0; 
 
var mdcTimer; 
 

 
$("#addButton").mousedown(startMouseCount); 
 
$("#addButton").mouseup(stopMouseCount); 
 

 
function startMouseCount() { 
 
    mdcTimer = window.setTimeout(function() { 
 
     mouseDownCount++; 
 
     $("#mouseCount").html(mouseDownCount); 
 
     startMouseCount(); 
 
    }, 100); 
 
} 
 
function stopMouseCount() { 
 
    clearTimeout(mdcTimer); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
 
<button id="addButton">button</button> 
 
<h2 id="mouseCount"></h2>

+0

Richtig, genau das habe ich gemacht und es hat funktioniert. Ich hatte gerade die Funktion selbst rekursiv aufrufen, da es andere Ereignisse gibt, die den Timer stoppen. Der variable Fehler war eigentlich ein Tippfehler meinerseits, weil ich ihn nicht kopiert und eingefügt habe, ich habe ihn eingegeben, aber Sie haben das hier behoben, also werde ich dies als die beste Antwort markieren und es brauchte nur eine zusätzliche Codezeile für die rekursiver Aufruf. Ich bevorzuge setTimeout gegenüber setInterval, weil es genauer ist. – Bobh

4

Sie haben eine Reihe von Problemen mit Ihrem Code:

  • Du mousedownCount mehrmals referenzieren, wenn Ihre Variable mouseDownCount ist. Die Konsistenz der Fälle ist wichtig.
  • Sie vermissten die ID-Referenz in $("mouseCount") (es sollte $("#mouseCount") sein).

Zusätzlich dazu, suchen Sie nach setInterval() statt setTimeOut(), wie setInterval() wird mehrfach auslösen, während setTimeOut() nur einmal ausgelöst wird.

Beachten Sie, dass Sie wahrscheinlich auch den Timer von der Zählung auf unbestimmter Zeit zu stoppen wollen, die auf mouseUp getan werden können:

Hier ist ein funktionierendes Beispiel:

var mouseDownCount = 0; 
 

 
$("#addButton").mousedown(function() { 
 
    startMouseCount(); 
 
}); 
 

 
$("#addButton").mouseup(function() { 
 
    endMouseCount(); 
 
}); 
 

 
function startMouseCount() { 
 
    $("#mouseCount").html(mouseDownCount) 
 
    mdcTimer = window.setInterval(function() { 
 
    mouseDownCount++; 
 
    $("#mouseCount").html(mouseDownCount); 
 
    }, 100); 
 
    return false; 
 
} 
 

 
function endMouseCount() { 
 
    clearInterval(mdcTimer); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id="addButton">Down</button> 
 
<div id="mouseCount"></div>

Hoffe, das hilft! :)

+0

Ich bin nicht der Downvoter ... Aber * «... dass es das alle 100 ms macht solange die Maus runter ist.» * –

+1

Ich habe meinen Code aktualisiert, um eine zweite Funktion zu erstellen, um den Timer einmal zu stoppen Taste wird nicht länger gedrückt =] –

Verwandte Themen