2011-01-19 19 views
124

Quiero widget.Rotator.rotate() que se retrase 5 segundos entre llamadas ... ¿cómo puedo hacer esto en jQuery ... parece como jQuery de delay() no funcionaría para este ...¿Cómo retraso una llamada de función durante 5 segundos?

+3

¿Quieres que sea llamado automáticamente con un retraso de 5 segundos entre invocaciones, o se llamará esto en respuesta a una acción del usuario y desea asegurarse de que espere al menos 5 segundos después de la última invocación antes de volver a hacerlo? En este último caso, ¿el usuario debe poder poner en cola los eventos o se debe ignorar la entrada si no han transcurrido 5 segundos? – Phrogz

Respuesta

269

Puede usar javascript llano, este llamará your_func una vez, después de 5 segundos:

setTimeout(function() { your_func(); }, 5000); 

Si su función no tiene parámetros y no hay un receptor explícito le puede llamar directamente setTimeout(func, 5000)

también hay un plugin que he usado una vez. Tiene los métodos oneTime y everyTime.

+24

Si no hay parámetros de función, no hay necesidad de ajustar una 'función' - esto funcionará bien:' setTimeout (your_func, 5000); ' – Oded

+1

@Oded ¿Está seguro de que' Rotator.rotate() 'no ¿Necesita el receptor para ser configurado en 'Rotator'? Si interpretas lo que sugieres, 'this' será la ventana. – Phrogz

+1

@Phrogz - Estaba hablando de la mecánica de 'setTimout'. – Oded

18
var rotator = function(){ 
    widget.Rotator.rotate(); 
    setTimeout(rotator,5000); 
}; 
rotator(); 

O:

setInterval(
    function(){ widget.Rotator.rotate() }, 
    5000 
); 

O:

setInterval(
    widget.Rotator.rotate.bind(widget.Rotator), 
    5000 
); 
Cuestiones relacionadas