Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.09.2009, 03:52
StepanR вне форума Посмотреть профиль Отправить личное сообщение для StepanR Найти все сообщения от StepanR
  № 1  
Ответить с цитированием
StepanR

Регистрация: Sep 2009
Сообщений: 90
Thumbs down Обработка событий для подгружаемых клипов

Делаю фотоальбом с превьюшками. Для превьюшек создаю пустые мувики-контейнеры, подгружаю в них содержимое через MovieClipLoader. Для контейнеров назначаю события - при нажатии подгружать "большую фотку".
Когда превьюшки создавал не динамически, все работало, теперь в opera и mozila события обрабатываются только если обновить страницу, когда загрузились превьюшки. Видимо связано с тем, что браузер их кэширует В IE работает нормально


Последний раз редактировалось StepanR; 01.09.2009 в 04:00.
Старый 01.09.2009, 04:35
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Как связано кэширование и сработка события? Кэширование вредит, когда обновляем содержимое, а на событийную модель влиять не должно.
Если конечно, сомневаетесь, обойдите кэширование прибавлением динамического рандомного суффикса к URL загружаемого контента... Но, ИМХО, дело не в этом.

Может быть дело обстоит так - ведь после загрузки контента контейнер теряет все свои обработчики и почти все другие программные свойства.
Если вы знаете это, то у вас обработчики должны назначаться ПОСЛЕ загрузки, в теле функции onLoadInit:
Код AS1/AS2:
loader.onLoadInit  = function (target_mc) {
  //что-то делается с превьюшками, может быть размер меняете, может еще что...
  target_mc.onPress  = function () {
   //вызов загрузки "большой фотки
  };
};
Если нет, попробуйте сделать так.
Хотя, конечно, если в IE работает нормально, то странно.. но не видя вашего кода, судить тяжело.

Добавлено через 4 минуты
Возможно как раз из-за разницы в работе браузеров в одних случаях сперва назначачается обработчик, а потом подгружается картинка и обработчик убивается. В других - картинка успевает загрузиться до назначения обработчика. Если у вас сделано не как я привел выше, то повдение как раз будет таким.


Последний раз редактировалось mooncar; 01.09.2009 в 04:45.
Старый 02.09.2009, 01:52
StepanR вне форума Посмотреть профиль Отправить личное сообщение для StepanR Найти все сообщения от StepanR
  № 3  
Ответить с цитированием
StepanR

Регистрация: 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.
Старый 02.09.2009, 02:32
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код - в теги... При всем желании вам помочь - в этой каше ничего не увидеть...
Скобки разнесите по отступам сообразно вложенности блоков. ..иначе логика останется понятной только вам...Вставьте пробелы около операторов.
Это ужас какой-то просто:
Код:
{

}}
Иначе вам никто не сможет/не захочет ничем помочь..


Последний раз редактировалось mooncar; 02.09.2009 в 02:39.
Старый 02.09.2009, 02:50
StepanR вне форума Посмотреть профиль Отправить личное сообщение для StepanR Найти все сообщения от StepanR
  № 5  
Ответить с цитированием
StepanR

Регистрация: Sep 2009
Сообщений: 90
Попробую привести в нормальный вид, но вообще
когда я прописываю View на временной шкале _w и выполняю функцию там же, оно работает, хотелось бы понять просто, как перенести эту функцию в onLoadInit, т.е. как правильно написать эти несколько строк
Код AS1/AS2:
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 минут
Код AS1/AS2:
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.
Старый 02.09.2009, 04:03
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
1. Вам не нужно создавать всякий раз экземпляр MovieClipLoader и слушателя. Достаточно одного комплекта. В вашей функции View оставьте только создание контейнера и саму загрузку.
2. Уберите из нее вообще всё. Все обработчики. Вытащите их наружу. Достаточно тоже только одного комплекта. Зачем вам плодить мусор? Пусть функция выполняет у вас только уникальные задачи (см. п.1). Класс MovieClipLoader со своими обработчиками разберется, что и куда вы загрузили.
3. Внутри функции обработчика можно безбоязненно ссылаться на родителський мувик:
Код AS1/AS2:
target_mc._parent
Это будет ссылка, а не "передача" внутрь. Вы же не передаете куда-то весь таймлайн, когда ссылаетесь на _root...
Еще что-то может быть можно подумать, но не сейчас...


Последний раз редактировалось mooncar; 02.09.2009 в 11:02.
Старый 02.09.2009, 16:55
StepanR вне форума Посмотреть профиль Отправить личное сообщение для StepanR Найти все сообщения от StepanR
  № 7  
Ответить с цитированием
StepanR

Регистрация: Sep 2009
Сообщений: 90
Большое спасибо! все заработало!

Добавлено через 6 часов 29 минут
позвольте еще вопрос! при нажатии кнопки создаю здесь контейнер
Код AS1/AS2:
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.
Старый 19.05.2010, 14:15
bear84 вне форума Посмотреть профиль Отправить личное сообщение для bear84 Найти все сообщения от bear84
  № 8  
Ответить с цитированием
bear84

Регистрация: Apr 2009
Адрес: altay
Сообщений: 32
это жесть
Код AS1/AS2:
mcLoader.loadClip(n, _parent._parent._parent.w_[container_name]);

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.