Анимация Canvas
Только начал общаться с js - пишу дипломную с использованием канвы и js. Проблема возникла вот тут:
$("#play").click(function(){ for (var i = 0; i<kol_sost; i++){ for (var t=1;t<c_id+1;t++){ jc("#my_circ"+t).animate({x: mas[i][t].x, y: mas[i][t].y ,radius: mas[i][t].rad},500); } } }); mas - массив состояний. В нём хранятся значения переменных для каждого состояния. kol_sost - количество состояний (!внезапно!) c_id - кол-во окружностей Использую jQuery и вот эту штуку http://jcscript.com/ Вполне возможно - это приличный говнокод, т.к. опыта общения со скриптом пока мало. Этот код переходит в одно из состояний из набора, вместо перехода через все этапы - т.е. если у нас есть 3 состояния круг переходит сразу в 3 минуя 2. Думал что проблема в отсутствии паузы после выполнения первого цикла - колдовал, колдовал - безрезультатно. |
не совсем понятно что на jc у вас в коде
|
http://jcscript.com/documentation/functions/animate
Изменение х, у и радиуса конкретной окружности на значения взятые из массива. |
Sanjke,
Вы совершаете логические ошибки. Во-первых, вы назначаете анимацию на объект - и тут же назначаете другую анимацию тех же значений того же объекта. Естественно, выполняется только анимация, назначенная последней. Если вы хотите, чтобы функции анимации выполнялись последовательно, используйте коллбэк. http://jcscript.com/documentation/fu...mate#animate_3 То есть, примерно так: jc('#myCircle').animate({x:50,y:50,radius:50},500,function(){ jc('#myCircle').animate({x:50,y:150,radius:100}); }); И еще - Вы совершенно зря выбираете объект по айдишнику в цикле каждый раз заново. Это весьма и весьма сказывается на производительности. Выберите один раз в массив все объекты, а потом обращайтесь уже напрямую к ним. Примерно так: var myCircle=jc('#myCircle'); myCircle.animate({x:50,y:50,radius:50},500,function(){ myCircle.animate({x:50,y:150,radius:100}); }); |
Всё-равно не помогает. Запускаю рекурсивно функцию рисовки, он у меня переходит в следующее состояние и всё, тушите свет.
По пониманию надо что-то типа <script type="text/javascript"> $(document).ready(function(){ $("#but").click(function(){ function step(t){ $("#bb").append(t); jc("#circ").animate({radius: t}); } for (i=1; i<100;i++){ setTimeout(function(){step(i)},1000); } }); jc.start("canv",50); jc.circle(50,50,10).id("circ"); }); </script> <input type="button" id="but" value="OK" /> <canvas id="canv" width=100 height=200></canvas> <div id="bb"></div> Тоже не работает. Проходит некоторый промежуток времени, затем блок наполняется 100 сотнями. Хотя по идее должно происходить плавное заполнение и плавное увеличение окружности |
Как вы программу написали, так она и работает. Почитайте статьи про JavaScript, что ли. Чтобы хотя бы не писать
for (i=1; i<100;i++){ setTimeout(function(){step(i)},1000); } Либо setTimeOut пропишите в саму функцию step, без всякого цикла, либо используйте setInterval(). |
Часовой пояс GMT +3, время: 11:15. |