TIPS OF WEB: продвинутый альбом с порнушкой Iv (dembicki@narod.ru) Спецвыпуск Xakep, номер #028, стр. 028-110-3 Зацени прием цепной реакции! Идея такова: начиная с первой, каждая последующая превьюшка после загрузки будет вызывать инициализацию загрузки следующей, и так по цепочке, пока не закончатся мувики этого класса. Итак, КАЖДЫЙ ЭКЗЕМПЛЯР при загрузке создает мувик, в который будет грузиться превьюшка. Затем первому из десяти (или какое ты там поставил значение переменной _root.preview.preview_step) мувиков дается команда стартануть (инициализировать) загрузку превьюшки. tmp.onLoad = function() { this.createEmptyMovieClip("pic", 0); if (this.num == 1) { this.initLoading(); } }; Инициализация загрузки - это последовательный вызов функций: 1) проверки наличия соответствующего узла XML; 2) собственно команды на загрузку (адрес берем из своего узла XML) и 3) проверки - загружена ли превьюшка. tmp.initLoading = function() { if (!this.checkNode()) { return; } this.pic.loadMovie(_root.input_xml[this.num+this._parent.begin].attributes.preview); this.onEnterFrame = this.checkIsLoaded; }; Проверка наличия соответствующего узла XML нужна, чтобы проверить, существует ли он и содержит ли необходимые для подгрузки данные. Если такого нет, то удаляем текущий мувик и вызываем эту же функцию в следующем мувике (она также удалит свой мувик, и так по цепочке до последнего). Здесь же можно уже назначить текст подсказки, взяв его из своего узла XML. И обязательно вернуть "истина", если проверка на наличие узла XML прошла успешно, иначе initLoading не даст команду на загрузку превьюшек. tmp.checkNode = function() { this.nod = _root.input_xml[this.num+this._parent.begin]; if (this.nod == undefined) { this._parent["p"+(this.num+1)].initLoading(); this.removeMovieClip(); return false; } this.tooltip_text = this.nod.attributes.comment; return true; }; Проверка, загружена ли превьюшка, нужна, чтобы отловить момент, когда она полностью загрузилась. Когда это произошло, нужно сделать следующее: 1) стартануть загрузку следующей превьюшки; 2) задать стартовый масштаб картинки равным единице; 3) начать анимацию загруженной превьюшки. tmp.checkIsLoaded = function() { if (this.pic.getBytesLoaded()/this.pic.getBytesTotal() == 1) { this._parent["p"+(this.num+1)].initLoading(); delete this.num; this._xscale = this._yscale=1; this.onEnterFrame = this.animateIt; } }; TIPSA 12 Принимай на вооружение прием расчета загрузки мувика, который засветился в листинге чуть выше! getBytesLoaded() и getBytesTotal() - рульные встроенные функции флэша. TIPSA 13 Программная анимация часто прикольнее, чем покадровая, а весит... ноль! Анимация загруженной картинки очень проста: в каждом кадре к масштабу прибавляем некий шаг (this.st), который тоже с каждым кадром увеличивается на 3. Через некоторое время масштаб станет больше чем 100% и сработает условие блока if. В этом блоке устанавливается масштаб равно 100% и прекращается обработка onEnterFrame. tmp.animateIt = function() { if (this._xscale>100) { this._xscale = this._yscale=100; delete this.st; this.onEnterFrame = null; return; } this._yscale = this._xscale += this.st += 3; |