![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 90
|
Делаю фотоальбом с превьюшками. Для превьюшек создаю пустые мувики-контейнеры, подгружаю в них содержимое через MovieClipLoader. Для контейнеров назначаю события - при нажатии подгружать "большую фотку".
Когда превьюшки создавал не динамически, все работало, теперь в opera и mozila события обрабатываются только если обновить страницу, когда загрузились превьюшки. Видимо связано с тем, что браузер их кэширует В IE работает нормальноПоследний раз редактировалось StepanR; 01.09.2009 в 04:00. |
|
|||||
|
Модрон-ветеринар
|
Как связано кэширование и сработка события? Кэширование вредит, когда обновляем содержимое, а на событийную модель влиять не должно.
Если конечно, сомневаетесь, обойдите кэширование прибавлением динамического рандомного суффикса к URL загружаемого контента... Но, ИМХО, дело не в этом. Может быть дело обстоит так - ведь после загрузки контента контейнер теряет все свои обработчики и почти все другие программные свойства. Если вы знаете это, то у вас обработчики должны назначаться ПОСЛЕ загрузки, в теле функции onLoadInit: loader.onLoadInit = function (target_mc) { //что-то делается с превьюшками, может быть размер меняете, может еще что... target_mc.onPress = function () { //вызов загрузки "большой фотки }; }; Хотя, конечно, если в IE работает нормально, то странно.. но не видя вашего кода, судить тяжело. Добавлено через 4 минуты Возможно как раз из-за разницы в работе браузеров в одних случаях сперва назначачается обработчик, а потом подгружается картинка и обработчик убивается. В других - картинка успевает загрузиться до назначения обработчика. Если у вас сделано не как я привел выше, то повдение как раз будет таким. Последний раз редактировалось mooncar; 01.09.2009 в 04:45. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 90
|
Спасибо, действительно поставил потом действия в onLoadInit и они начали обрабатываться. Проблема в том, что я не понимаю, какв теле onLoadInit прописать действия для других объектов = так что бы большая картинка подгружалась не в тот мувик, в котром создаются превьюшки.
Я делаю вот так - в onLoadInit вставляю target_mc.onRelease = function() {View(c_name, _parent._parent.w_);}; где View такая: var View:Function = function (container_name:String, w_:MovieClip) { w_[container_name] = createEmptyMovieClip(container_name, getNextHighestDepth()); w_.mcLoader = new MovieClipLoader(); w_.myListener = new Object(); w_.myListener.onLoadStart = function(target_mc:MovieClip) { var loadProgress:Object = my_mcl.getProgress(target_mc); }; w_.myListener.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number) { }; w_.myListener.onLoadComplete = function(target_mc:MovieClip) { var loadProgress:Object = my_mcl.getProgress(target_mc); }; w_.myListener.onLoadError = function(mcTarget:MovieClip, sErrorCode:String):Void { if(rr != 1){ if (sErrorCode == "URLNotFound"); { }} else {if (sErrorCode == "LoadNeverCompleted") { trace("ERROR: Load failed."); } else { trace("Load error: " + sErrorCode); } } }; w_.myListener.onLoadInit = function(target_mc:MovieClip, name_of_slides:String) { var w = target_mc._width; var h = target_mc._height; if ((target_mc._height/target_mc._width)<(_parent.maska._height/_parent.maska._width)) { target_mc._height = _parent.maska._height; target_mc._width = target_mc._width*_parent.maska._height/h; }; if ((target_mc._height/target_mc._width)>(_parent.maska._height/_parent.maska._width)) { target_mc._width = _parent.maska._width; target_mc._height = target_mc._height*_parent.maska._width/w; }; target_mc._x = Math.round((_parent.maska._width/2)-(target_mc._width/2)); target_mc._y = Math.round((_parent.maska._height/2)-(target_mc._height/2)); }; w_.myListener.onLoadError = function(target_mc:MovieClip, errorCode:String) { }; w_.mcLoader.addListener(myListener); var n = "photos/patterns/"+ _parent._parent._name +"/"+ nn + ".jpg"; w_.mcLoader.loadClip(n,this[container_name]); }; в общем я не знаю, как загружать большую картинку в клип w_, видимо не очень логично запихивать его в аргумент.. Последний раз редактировалось StepanR; 02.09.2009 в 01:58. |
|
|||||
|
Модрон-ветеринар
|
Код - в теги... При всем желании вам помочь - в этой каше ничего не увидеть...
Скобки разнесите по отступам сообразно вложенности блоков. ..иначе логика останется понятной только вам...Вставьте пробелы около операторов. Это ужас какой-то просто: Иначе вам никто не сможет/не захочет ничем помочь.. Последний раз редактировалось mooncar; 02.09.2009 в 02:39. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 90
|
Попробую привести в нормальный вид, но вообще
когда я прописываю View на временной шкале _w и выполняю функцию там же, оно работает, хотелось бы понять просто, как перенести эту функцию в onLoadInit, т.е. как правильно написать эти несколько строк var View:Function = function (container_name:String, w_:MovieClip) { w_[container_name] = createEmptyMovieClip(container_name, getNextHighestDepth()); w_.mcLoader = new MovieClipLoader(); w_.myListener = new Object(); //etc... //далее стандартные действия - загрузка картинки, выравнивание ее, установка размера... } w_.mcLoader Добавлено через 10 минут var View:Function = function (container_name:String, w_:MovieClip) { w_[container_name] = createEmptyMovieClip(container_name, getNextHighestDepth()); w_.mcLoader = new MovieClipLoader(); w_.myListener = new Object(); w_.myListener.onLoadStart = function(target_mc:MovieClip) { var loadProgress:Object = my_mcl.getProgress(target_mc); }; w_.myListener.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number) { }; w_.myListener.onLoadComplete = function(target_mc:MovieClip) { var loadProgress:Object = my_mcl.getProgress(target_mc); }; w_.myListener.onLoadError = function(mcTarget:MovieClip, sErrorCode:String):Void{ }; w_.myListener.onLoadInit = function(target_mc:MovieClip, name_of_slides:String) { var w = target_mc._width; var h = target_mc._height; if ((target_mc._height/target_mc._width) < (_parent.maska._height/_parent.maska._width)) { target_mc._height = _parent.maska._height; target_mc._width = target_mc._width*_parent.maska._height/h; }; if ((target_mc._height/target_mc._width) > (_parent.maska._height/_parent.maska._width)) { target_mc._width = _parent.maska._width; target_mc._height = target_mc._height*_parent.maska._width/w; }; target_mc._x = Math.round((_parent.maska._width/2) - (target_mc._width/2)); target_mc._y = Math.round((_parent.maska._height/2) - (target_mc._height/2)); }; w_.myListener.onLoadError = function(target_mc:MovieClip, errorCode:String) { }; w_.mcLoader.addListener(myListener); var n = "photos/patterns/" + _parent._parent._name + "/" + nn + ".jpg"; w_.mcLoader.loadClip(n,this[container_name]); }; Последний раз редактировалось StepanR; 02.09.2009 в 03:26. |
|
|||||
|
Модрон-ветеринар
|
1. Вам не нужно создавать всякий раз экземпляр MovieClipLoader и слушателя. Достаточно одного комплекта. В вашей функции View оставьте только создание контейнера и саму загрузку.
2. Уберите из нее вообще всё. Все обработчики. Вытащите их наружу. Достаточно тоже только одного комплекта. Зачем вам плодить мусор? Пусть функция выполняет у вас только уникальные задачи (см. п.1). Класс MovieClipLoader со своими обработчиками разберется, что и куда вы загрузили. 3. Внутри функции обработчика можно безбоязненно ссылаться на родителський мувик: Это будет ссылка, а не "передача" внутрь. Вы же не передаете куда-то весь таймлайн, когда ссылаетесь на _root... Еще что-то может быть можно подумать, но не сейчас... Последний раз редактировалось mooncar; 02.09.2009 в 11:02. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 90
|
Большое спасибо! все заработало!
Добавлено через 6 часов 29 минут позвольте еще вопрос! при нажатии кнопки создаю здесь контейнер trace(container_name); _parent._parent._parent.w_.createEmptyMovieClip(container_name, getNextHighestDepth()); mcLoader.loadClip(n, _parent._parent._parent.w_[container_name]); однако такое впечатление, что картинка каждый раз грузится в одно и то же место, замещая предыдущую хотя container_name меняется Добавлено через 56 часов 18 минут если что, проблема решена Последний раз редактировалось StepanR; 02.09.2009 в 23:47. |
|
|||||
|
Регистрация: Apr 2009
Адрес: altay
Сообщений: 32
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|