|
программная анимация
Сегодня утром наткнулся на данную статью Основы программной анимации на JavaScript
и вроде всё в порядке... даже реализовал анимацию, движение по спирали, пока в голову не начали лезть сомнения.. Всё-таки для человека долгое время развлекающегося асемблером и далекого от web-технологий всё это как то странно.. просто хочу уточнить пару моментов.. Допустим есть что-то похожее на: function go(arg1,arg2){ var radius = arg1; var obj = arg2; /* элемент который вращаем*/ ... setTimeout(function() { /* Используем radius и obj*/ /* Тут изменение параметров */ if (/* условие срабатывания итерации */) setTimeout(arguments.callee, 0); }, 0); } Не могу до конца понять.. Смотрите.. мы запускаем go(MyElement1, Rad); проинициализировались переменные setTimeout запускает анонимную функцию и гоняет её по циклу, пользуясь переменными go(), пока не сделает все свои дела... вопрос встал вот в чем: пока setTimeout гоняет свою функцию, она пользуется переменными go() и тут я могу понять замыкание и тд.. НО! А если я пользуюсь этой функцией не для одного элемента, а для нескольких??? Разве переменные radius и obj не должны перетераться???? и на этом месте у меня в голове заварилась каша :) |
они каждый раз будут заново создаваться и каждый раз будет появляться замыкание. вроде бы :)
|
я пока для себя могу найти только одно разумное объяснение...
что когда идет обращение к go() второй/.../n-й раз интерпритатор будет видеть, что [[scope]] функции go, ныне принадлежащий анонимной функции, пока еще занят и будет создавать новый [[scope]], а старый остаётся за анонимной функцией до её смерти... Логично?? или я не прав... |
Цитата:
|
Каждому вызову - по отдельному [скопу]) melky всё правильно сказал...
Кстати, на будущее: если нужно анимировать два разных объекта одновременно, то лучше пользоваться одним таймером, который будет менять св-ва обоих. |
спасибо за ответы
trikadin, в моем случае согласен... а если я не знаю сколько их будет? допустим два от одного родителя и 6 от другого с разными радиусом и скоростью например... страшная же функция получится)))) я хотел найти наиболее простое решение для себя, чтоб использовать как $(...).animate({...}); |
А если 100500 и все с разной анимацией разных css-св-в?)
Анимацию на javascript надо оптимизировать для каждого отдельного случая, иначе тормозно будет. |
лучше тогда использовать transitions ...
ёмаё, ну для кого их придумывали? в каждой теме про них говорю, толку никакого :) |
melky, в каждой теме говорят, что использовать document.write и ставить обработчик на кнопку, а не на отправку формы - плохо. Никакого толку)
|
обработчик ещё через свойство и через атрибут ставить :) где-то тут было.
|
Часовой пояс GMT +3, время: 00:09. |
|