Повторный вызов функции
Привет.
Не получается вызвать функцию повторно, чтобы при каждом нажатии выводился массив globalArray по порядку с использованием метода setInterval(); Почему то выводится один раз. http://jsfiddle.net/awosdsL6/1/ $(function() { var arr01 = ['a1', 'a2', 'a3', 'a4'], arr02 = ['b1', 'b2', 'b3', 'b4'], arr03 = ['c1', 'c2', 'c3', 'c4'], globalArray = [arr01, arr02, arr03]; var i = 0, k = 0, n = 0; $("#next").click(function() { if (i < globalArray.length) { if (k < globalArray[n].length) { setInterval(function() { $("#matrix").append(globalArray[n][k]); k++; },200); } i++; /* } else { i = 0; if (i < globalArray.length) { if (k < globalArray[n].length) { setInterval(function() { $("#matrix").append(globalArray[n][k]); k++; },200); } i++;*/ } }); }); Вот здесь все работает http://jsfiddle.net/c3rggsot/ $(function() { var arr01 = ['a1', 'a2', 'a3', 'a4'], arr02 = ['b1', 'b2', 'b3', 'b4'], arr03 = ['c1', 'c2', 'c3', 'c4'], globalArray = [arr01, arr02, arr03]; var i = 0; $("#next").click(function(){ if (i < globalArray.length) { document.getElementById("info").innerHTML = globalArray[i]; i++; } else { i = 0; document.getElementById("info").innerHTML = globalArray[i]; i++; } }); }); |
Цитата:
|
rvsbox,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .my{ font-size: 4em; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> $(function() { var arr01 = ["a1", "a2", "a3", "a4"], arr02 = ["b1", "b2", "b3", "b4"], arr03 = ["c1", "c2", "c3", "c4"], globalArray = [arr01, arr02, arr03], len = globalArray.length, i = 0, timer; function fn(n, k) { $("#info").text(n.slice(0, k)); if (k++ < n.length) timer = window.setTimeout(function() { fn(n, k) }, 200) } $("#next").click(function() { window.clearTimeout(timer); fn(globalArray[i].slice(0), 1); i = ++i % len }) }); </script> </head> <body> <button id="next">next</button> <div id="info"></div> </body> </html> |
спасибо, но сделал по другому
http://jsfiddle.net/uu064upk/3/ $(function() { var arr01 = ['a1', 'a2', 'a3', 'a4'], arr02 = ['b1', 'b2', 'b3', 'b4'], arr03 = ['c1', 'c2', 'c3', 'c4'], globalArray = [arr01, arr02, arr03]; var k = 0, j = 0; wer = function() { for (var i = 0; i < globalArray[k].length; i++ ) { $("#matrix").text(""); setTimeout(function (j) { $("#matrix").append(globalArray[k-1][j]); }, i * 200, i); // x*1000 skol'ko vsego vremeni potrebuetsja, x - parametr } } $("#next").click(function() { if (k < globalArray.length) { wer(); k++; } else { k = 0; wer(); k++; } }); }); |
rvsbox,
нажмите быстро кнопку несколько раз в 3 сообщении и в вашем варианте. |
я так понимаю это из-за setTimeout()??
|
не могук прикрутить
window.clearTimeout(timer);именно в моем коде. Понимаю что у меня неудачный скрипт и больше строк, но это необходимо для понимания действия алгоритма |
rvsbox,
у вас куча таймеров их сложно остановить все сразу, почти ваш первоначальный вариант, выстреливает очередь таймеров, только в первоначальном коде очереди ещё бесконечные и накладываются друг на друга. вы создаёте очереди вместо того, чтобы дождаться исполнения текущего действия, функции в очереди могут и не понадобится, но уже запущены на исполнение. проще отменить один таймер, чем кучу на разных этапах. |
Часовой пояс GMT +3, время: 13:10. |