Me gustaría una rutina de javascript más corta posible que cuando un mousedown ocurre en un botón, primero responde como un clic de ratón y luego, si el usuario mantiene presionado el botón, responde como si el usuario estaba continuamente enviando clics del mouse y después de un tiempo con el botón presionado actúa como si el usuario estuviera acelerando sus clics de mouse ... básicamente piense en ello como una repetición de tecla presionada con aceleración en el tiempo.
es decir usuario mantiene pulsado el botón del ratón (x = función de llamada) - x___x___x___x__x__x_x_x_x_xxxxxxxNecesito el código de Javascript para presionar y mantener oprimido el botón
Respuesta
function holdit(btn, action, start, speedup) {
var t;
var repeat = function() {
action();
t = setTimeout(repeat, start);
start = start/speedup;
}
btn.mousedown = function() {
repeat();
}
btn.mouseup = function() {
clearTimeout(t);
}
};
/* to use */
holdit(btn, function() { }, 1000, 2); /* x..1000ms..x..500ms..x..250ms..x */
Cuando se pulsa el botón, llame window.setTimeout
con su tiempo previsto y la función de x
, y ajustar el temporizador de nuevo al final de x
pero esta vez con un intervalo más pequeño.
Elimine el tiempo de espera usando window.clearTimeout
al soltar el botón del mouse.
Estaba ocupado tratando de escribir el código para él, pero decidí no hacerlo y, mientras tanto, publicaste esto y era exactamente en lo que estaba trabajando. Muy agradable. –
algo así como debajo de la pseudo código podría funcionar ..
var isClicked = false;
var clickCounter = 100;
function fnTrackClick(){
if(isClicked){
clickCounter--;
setTimeout(clickCounter * 100, fnTrackClick);
}
}
<input type="button" value="blah" onmousedown="isClicked=true;" onmouseover="fnTrackClick();" onmouseup="isClicked = false;" />
Sólo hay que poner el siguiente toggleOn en el OnMouseDown y toggleOff en el onmouseup del botón.
var tid = 0;
var speed = 100;
function toggleOn(){
if(tid==0){
tid=setInterval('ThingToDo()',speed);
}
}
function toggleOff(){
if(tid!=0){
clearInterval(tid);
tid=0;
}
}
function ThingToDo{
}
Esta es una solución simple que funciona, pero usa variables globales. También prefiero otras soluciones donde cada iteración llama al siguiente, tanto para una lógica más segura como porque cada llamada puede cambiar la duración del intervalo (para la aceleración). –
- 1. ¿Cómo implemento presionar y mantener presionado el botón javascript?
- 2. oyente para presionar y soltar un botón
- 3. Ignorando UIGestureRecognizer al presionar el botón
- 4. mantener el botón de Android seleccionado estado
- 5. Mantener el foco en el cuadro de texto después de presionar enter
- 6. acción de repetición de android al presionar y mantener presionado un botón
- 7. ASP.NET C#, necesito presionar un botón dos veces para que suceda algo
- 8. mantener el alcance con javascript
- 9. Recordar ajax datos agregados al presionar el botón Atrás
- 10. Necesito el código de muestra de MUMPS
- 11. ¿Cómo iniciar el hilo si se presiona el botón y detenerlo si se vuelve a presionar?
- 12. Windows Forms: Entrar presionar tecla activa el botón de enviar?
- 13. Recargar la página al presionar el botón Atrás
- 14. Javascript y el uso de expresiones regulares: Separar una cadena y mantener el separador de
- 15. código de selenio para seleccionar el botón de radio
- 16. Usando el código C# para simular el llenado del cuadro de texto y presionando el botón
- 17. Cerrar la aplicación al presionar el botón Atrás en Android
- 18. Biblioteca para escribir el código de JavaScript
- 19. Necesito analizar el código C# para encontrar clases sin referencias
- 20. Qt - Hoja de estilo para el botón personalizado del mouse sobre el botón y el botón
- 21. Formulario HTML hacer algo de "acción" al presionar el botón enviar
- 22. código de JavaScript para el objeto matemático
- 23. Ir a URL después de presionar el botón Aceptar en alerta
- 24. ¿Cómo ejecutar el código del lado del cliente y del servidor para el mismo botón?
- 25. Organizando el código javascript
- 26. ¿Cómo denegar el apagado al presionar el botón de encendido por un tiempo?
- 27. Cómo proteger el código Javascript?
- 28. Mejor aplicación para reducir el código JavaScript y el código CSS
- 29. ¿Cómo puedo interceptar el botón para presionar los auriculares en Android?
- 30. ¿Necesito latir para mantener abierta una conexión TCP?
gracias. Agregué una función de registro para la curva exponencial en lugar de la lineal, pero eso es casi exactamente lo que estaba buscando. – zurk
Necesitaba borrar el tiempo de espera en mouseout también, de lo contrario podría deslizar el mouse fuera del botón y luego el desplazamiento continuaría. – edward
Corrígeme si me equivoco, pero parece que tienes algunos puntos y comas fuera de lugar, las declaraciones de funciones internas necesitan punto y coma y la declaración de función externa no. –