Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   программная анимация (https://javascript.ru/forum/misc/23608-programmnaya-animaciya.html)

taha 30.11.2011 14:00

trikadin, нет нет.... не я... начиная с 8-го поста пошли какие-то Ваши личные с
melky темы про css и линух и про то, о чем melky говорит в каждой теме

trikadin 30.11.2011 16:10

Цитата:

Сообщение от taha
trikadin, нет нет.... не я... начиная с 8-го поста пошли какие-то Ваши личные с
melky темы про css и линух и про то, о чем melky говорит в каждой теме

А, ну это да) Но там мы просто не могли не пообсуждать.

Но про линь-то вы начали спорить на тему убоства/неудобства его для обычного юзверя.

melky 30.11.2011 18:00

Цитата:

Сообщение от taha (Сообщение 139881)
И вообще мы ушли от темы...

очень далеко. ;)

вернёмся к анимации, совершаемой в бОльшей мере инструментами JavaScript.

taha 01.12.2011 11:44

trikadin, melky спасибо за советы, стало работать намного быстрее...

taha 04.12.2011 16:02

у меня еще один вопросик.. а если я буду использовать не

setTimeout(function() {
    /* Тут изменение параметров */
    if (/* условие срабатывания итерации */)
        setTimeout(arguments.callee, 0);
}, 0);


а следущее

function RunAnimate(obj, R, dlt,start){
if(progress < 1) setTimeout(function(){RunAnimate(obj, R, dlt, start);}, 10);
}

второй вариант будет работать быстрее?? ведь по идее кучи [[скопов]] создаваться не должно.. так?? так как для RunAnimate всё передается через аргументы

trikadin 04.12.2011 16:18

Используйте setInterval при создании анимации...

taha 04.12.2011 16:48

а потом
if(progress < 1) ClearInterval(handle);

тоже как-то не очень хорошо, нужно будет хранить handle, тоесть будет сохраняться скоп вызвавшей функции...
хотя это лучше чем куча скопов от сеттаймаут...
спасибо, ща попробую

trikadin 04.12.2011 17:16

Программная анимация на JS делается примерно так:

<div id="elem" style="width: 10px; height: 10px; background: red; position:absolute"></div>
<script>
div= document.getElementById("elem");
pos=0;
interv= setInterval(function(){
 if (++pos > 50){
  clearInterval(interv);
  return;
 };
 div.style.left= pos+"px";
}, 50);
</script>

nerv_ 04.12.2011 19:09

еще вариант
<html>
	<head>
		<meta charset="utf-8">
		<style type="text/css">
			div { background-color:green; height:100px; width:100px; }
		</style>
		<script type="text/javascript">
			var i = 0;
			function x() {
				if (i<400) {
					document.getElementsByTagName('div')[0].style.marginLeft=++i+'px';
					setTimeout(x,10);
				}
			}
		</script>
	</head>
	<body>
		<div onclick="x();"></div>
	</body>
</html>

taha 04.12.2011 19:49

nerv_, я им и пользовался... просто хочу попробовать разные способы и найти для себя наиболее оптимальный..

Думаю, что сопсоб trikadin, будет оптимальней.. ибо [[скоп]] RunAnimatin создастся один раз и будет юзаться функцией setInterval'а..
В случае setTimeout(RunAnimatin,10); я так понимаю, что RunAnimatin будет запускаться раньше завершения, предыдущего запуска, и для нё будет создаваться новый [[скоп]].. и следовательно грузится будет больше..

это я так понимаю, могу быть не прав....


Часовой пояс GMT +3, время: 15:20.