2012-04-06 15 views
10

Estoy tratando de tener cambio de propiedad izquierda de un div por su auto - una por segundo cuando su vuelo estacionario sobre lo que hizo esto:setInterval() no se repite. Sólo funciona 1 vez

$("div.scroll_left").hover(function(){ 
    var left_num = $('div.license_video').css("left") 
    var left_num1 = parseInt(left_num, 10) - 1; 
    var timerID = setInterval(alert(left_num1), 1000); 
    //var timerID = setInterval(slideleft(left_num1), 1000); 
},function(){ 
    clearInterval(timerID); 
}); 
//function slideleft(left_num){ 
    //$('.license_video').css('left', left_num + "%"); 
//} 

En teoría se podría pensar que repetir hasta que se mueve su cursor desactiva el intervalo. Cuando lo cierro, lo hace una vez y nunca se repite (no hay errores). Luego, cuando cierro el cursor, aparece el error "Unbeught ReferenceError: timerID no está definido"

+0

timerId se define dentro del ámbito de la .hover (function() ... Intenta definir timerId antes $ ("div.scroll_left") ... (Me Don; t piensa esta dirección es la pregunta repetitiva setInterval, pero es un comienzo). –

+0

Es posible que desee pensar en usar ['.animate()'] (http://api.jquery.com/animate). –

Respuesta

14

Así que tienes dos problemas diferentes aquí:

// (1) timerID needs to be defined in a scope accessible to both hover callbacks 
var timerID = null; 

$("div.scroll_left").hover(function(){ 
    var left_num = $('div.license_video').css("left") 
    var left_num1 = parseInt(left_num, 10) - 1; 

    // (2) Pass a *function* to setInterval 
    timerID = setInterval(function() { 
     alert(left_num1) 
    }, 1000); 
}, function(){ 
    clearInterval(timerID); 
    timerID = null; 
}); 

Cuando se escribe

setInterval(alert(left_num1), 1000); 
// or 
setInterval(slideleft(left_num1), 1000); 

está de paso el valor devuelto llamando alert() o slideleft() (respectivamente) para setInterval . Usted es no pasando la función en sí.

13

setInterval no funciona en absoluto. No le está pasando una función como primer argumento.

Está llamando alertinmediatamente y tratando de usar su valor de retorno como la función para repetir.

var timerID = setInterval(function() { alert(left_num1) }, 1000); 
+0

Excepto eliminar la 'alerta() 'y vuelva a poner la función' slideleft() '. Nadie quiere alertas en un intervalo. – jfriend00

+0

Eso no funciona con setInterval (function() {$ ('. license_video'). css ('left', left_num +" % ")}, 1000); es por eso que no lo estaba usando antes. Todavía aparece el error "Uncaught ReferenceError: timerID no definido" –

+0

@RosengustaGarrett. Mi respuesta explica cómo resolver el problema "Uncaught ReferenceError". –

5

Usted está asignando null para ser la función para llamar. ¿Por qué? Porque llamó al alert y le asignó su valor de retorno al parámetro setInterval.

su lugar, utilice una función anónima:

setInterval(function() {doStuff();},1000); 
0

Muy fácil ;-) ... i love jQuery, sin importar una versión ... u necesidad javascript puro se enviará pm mí es puede ayudar.

umavez = 0; 
 
setInterval(function() { 
 
\t if (umavez == 0) { 
 
     for (x=0;x<10;x++) { 
 
     $('div.test').append('<div>'+x+'</div>'); 
 
     } 
 
    } 
 
    umavez = 1; 
 
}, 500);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="test">Linha:</div>

Cuestiones relacionadas