Estoy tratando de hacer que desaparezca el bucle usando javascript, los códigos funcionan bien... pero quiero hacer que el bucle se detenga después de varias veces... estos son los códigos:
$(document).ready(function() { var j = 0; var delay = 9000; //millisecond delay between cycles function cycleThru(){ var jmax = $("ul#cyclelist li").length -1; $("ul#cyclelist li:eq(" + j + ")") .animate({"opacity" : "1"} ,400) .animate({"opacity" : "1"}, delay) .animate({"opacity" : "0"}, 400, function(){ (j == jmax) ? j=0 : j++; cycleThru(); }); }; cycleThru(); });¿Qué debo hacer si quiero detener el ciclo después de 10x?
Gracias por la ayuda
Tome esta línea var jmax = $("ul#cyclelist li").length -1; fuera de la función. De lo contrario, cada vez que se llame a cycleThru , se creará un nuevo j
$(document).ready(function() { var jmax = $("ul#cyclelist li").length - 1; var j = 0; var delay = 9000; //millisecond delay between cycles function cycleThru() { $("ul#cyclelist li:eq(" + j + ")") .animate({ "opacity": "1" }, 400) .animate({ "opacity": "1" }, delay) .animate({ "opacity": "0" }, 400, function() { if (j !== max) { j++; cycleThru(); } }); }; cycleThru(); });Una manera fácil de resolver esto sería aceptar un parámetro de cycles en cycleThru , que se usa para especificar la cantidad de ciclos después de los cuales se detiene la recursividad.
function cycleThru(cycles = Infinity) {Luego agrega una cláusula de protección a la función recursiva para detener la recursividad.
if (cycles <= 0) return; Cuando llame recursivamente a cycleThru reduzca los cycles en uno.
cycleThru(cycles - 1); Finalmente pase la cantidad de ciclos con la llamada cycleThru inicial.
cycleThru(10);Dando como resultado el siguiente código:
$(document).ready(function () { var j = 0; var delay = 9000; // millisecond delay between cycles function cycleThru(cycles = Infinity) { if (cycles <= 0) return; var jmax = $("ul#cyclelist li").length - 1; $("ul#cyclelist li:eq(" + j + ")") .animate({"opacity" : "1"} ,400) .animate({"opacity" : "1"}, delay) .animate({"opacity" : "0"}, 400, function () { (j == jmax) ? j=0 : j++; // or: j = (j + 1) % jmax cycleThru(cycles - 1); }); }; cycleThru(10); });