|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2008
Сообщений: 64
|
Как добавить прелоадер к превьюшкам в галерее
Есть галерея, как добавить прелодер для каждой превьюшки? Как правильно создать листенер для каждой превьюхи?
В таком варианте отслеживается только загрузка последней galleryXML.onLoad = function(success) { if (success) { total = this.firstChild.childNodes[1].childNodes.length; for (var i:Number = 0; i<total; i++) { thumbnails.push(this.firstChild.childNodes[1].childNodes[i].attributes.thumbnail); var preview_mc:MovieClip = thumbnails_mc.attachMovie("box", "box"+i, i); preview_mc.ID = i; var loader:MovieClipLoader = new MovieClipLoader(); var listener:Object = {}; loader.addListener(listener); loader.loadClip(galleryFolder+thumbnails[i], preview_mc.target_mc); listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { percent = Math.round(bytesLoaded/bytesTotal*100); preview_mc.preloader_txt.text = (percent); }; } } |
|
|||||
попробуй так:
var total:Number; var thumbnails:Array = new Array(); galleryXML.onLoad = function(success) { if (success) { total = this.firstChild.childNodes[1].childNodes.length; for (var i:Number = 0; i < total; i++) { thumbnails[i] = this.firstChild.childNodes[1].childNodes[i].attributes.thumbnail; } loadThumbs(); } } function loadThumbs(){ for (var i:Number = 0; i < total; i++) { var preview_mc:MovieClip = thumbnails_mc.attachMovie("box", "box"+i, i); preview_mc.ID = i; var mclListener:Object = new Object(); mclListener.onLoadStart = function (target:MovieClip){ }; mclListener.onLoadProgress = function (target:MovieClip, bytesLoaded:Number,bytesTotal:Number):Void { percent = Math.round(bytesLoaded/bytesTotal*100); preview_mc.preloader_txt.text = percent; }; mclListener.onLoadComplete = function (target:MovieClip){ }; mclListener.onLoadInit = function (target:MovieClip){ }; var image_mcl:MovieClipLoader = new MovieClipLoader(); image_mcl.addListener(mclListener); image_mcl.loadClip(thumbnails[i], preview_mc.target_mc); } } |
|
|||||
Модрон-ветеринар
|
Лучше ограничится только одним объектом MovieClipLoader и соответственно одним набором обработчиков и одним слушателем. Объявить их вне цикла.
А вот в цикле как раз - только attachMovie и loadClip. Так можно поступить, поскольку внутри обработчиков есть аргумент target:MovieClip. От него и нужно будет отталкиваться, например, при индикации загрузки. Вот так: function loadThumbs(){ var mclListener:Object = new Object(); mclListener.onLoadStart = function (target:MovieClip){ }; mclListener.onLoadProgress = function (target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { percent = Math.round(bytesLoaded / bytesTotal * 100); target._parent.preloader_txt.text = percent; //target._parent - это соответственные box1..., то есть родители target_mc по этой записи: preview_mc.target_mc }; mclListener.onLoadComplete = function (target:MovieClip){ }; mclListener.onLoadInit = function (target:MovieClip){ }; var loader:MovieClipLoader = new MovieClipLoader(); loader.addListener(mclListener); for (var i:Number = 0; i < total; i++) { var preview_mc:MovieClip = thumbnails_mc.attachMovie('box', 'box' + i, i); preview_mc.ID = i; loader.loadClip(thumbnails[i], preview_mc.target_mc); } } Последний раз редактировалось mooncar; 22.10.2009 в 03:15. |
|
|||||
Цитата:
Цитата:
|
|
|||||
Модрон-ветеринар
|
Ага, я так обычно делаю...
var loader:MovieClipLoader = new MovieClipLoader(); var mclListener:Object = new Object(); loader.addListener(mclListener); mclListener.onLoadStart = function (target:MovieClip){ }; mclListener.onLoadProgress = function (target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { percent = Math.round(bytesLoaded / bytesTotal * 100); target._parent.preloader_txt.text = percent; //target._parent - это соответственные box1..., то есть родители target_mc по этой записи: preview_mc.target_mc }; mclListener.onLoadComplete = function (target:MovieClip){ }; mclListener.onLoadInit = function (target:MovieClip){ }; function loadThumbs(){ for (var i:Number = 0; i < total; i++) { var preview_mc:MovieClip = thumbnails_mc.attachMovie('box', 'box' + i, i); preview_mc.ID = i; loader.loadClip(thumbnails[i], preview_mc.target_mc); } } |
|
|||||
Регистрация: Feb 2009
Сообщений: 18
|
Вопрос может даже тупой но?
а) будет ли ждать цикл пока лоадер загрузить картинку? б) если ждет не зависнет ли флешка пока цикл будет стоять? |
|
|||||
Модрон-ветеринар
|
a) а ему и не нужно ждать - если вы сделали, как я рекомендовал, то в цикле у вас только старт загрузки, а за ее обслуживание отвечает экземмпляр MovieClipLoader и обработчики его событий.
б) с чего бы это циклу "стоять"? Цикл отработается своим чередом и практически мгновенно, а все остальное отработася своим чередом. Автор, Action Script работает асинхронно. |
Часовой пояс GMT +4, время: 00:29. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|