Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как определить по какому MovieClip кликнули (http://www.flasher.ru/forum/showthread.php?t=68006)

serf 17.08.2005 12:01

Как определить по какому MovieClip кликнули
 
Добрый день

Подскажите пожалуйста как определить по какому MovieClip кликнули.

Я динамически загружаю фотографии в фильм так:

for (i=1; i<=kol; i++)
{
_root.createEmptyMovieClip("images_" + i + "", i);
loadMovie("./portfolio/" + path + "/" + i + ".jpg", "images_" + i + "");
}

А потом хочу реализовать возможность, чтобы каждая фотография открывалась в новом окне при нажатии мыши, так:

images_2.onRelease = function() {
getURL("javascript:void window.open('/portfolio/" + path + "/2.jpg', '1', 'width=187,height=290,directories=no,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no');");
};

Но так будет работать при условии, что я в ручную задаю имя images_2, а как сделать чтобы в динамике отслеживалось по какой из фотографии (MovieClip) кликнули?

За ранее благодарен

DeadMorozz 17.08.2005 12:43

Кажется, вот так должно работать.
Ты просто циклом делаешь клипы - и на каждый, не отходя от кассы, вешаешь свой экшен. Но, заметь, это просто пример кода - в реальной разработке надо все эти созданные клипы еще как-то размещать на опредеденном расстоянии друг от друга, но нет никакой информации о том, как они будут выкладываться.
Код:

for (i=1; i<=kol; i++){
        var clip:MovieClip = _root.createEmptyMovieClip("images_" + i + "", i);
        clip.loadMovie("./portfolio/" + path + "/" + i + ".jpg", "images_" + i + "");
        var clip.id:Number = i;
        clip.onRelease = function(){
                getURL("javascript:void window.open('/portfolio/" + path + "/"+this.id+".jpg', '1', 'width=187,height=290,directories=no,location=no,m enubar=no,resizable=no,scrollbars=no,status=no,toolbar=no');");
        }
}


serf 17.08.2005 13:14

К сожелению так не работает, т.к. в первом кадре код загружает изображения, потом идет предзагрузчик, пока он их загружает и вообще не видет обработчика onRelease внутри цикла for.

Тут должен быть другой подход, но какой?

DeadMorozz 17.08.2005 14:07

serf
код работает.
просто в нем нет смешения мувиклипа с каждой последующей загруженной фоткой. Лечится просто: если размер фоток известен, то надо каждому новому клипу давать _x+clipWidth+spacer.

serf 17.08.2005 14:56

Не получается

Вот этот код в первом кадре:

for (i=1; i<=kol; i++)
{
_root.createEmptyMovieClip("images_" + i + "", i);
loadMovie("./portfolio/" + path + "/" + i + ".jpg", "images_" + i + "");
eval("images_" + i)._alpha = 0;
}

А вот этот код в 5-ом кадре и на 5-ом кадре мы остановились: // Который не доделанный

images_2.onRelease = function() {
name = "2.jpg";
getURL("javascript:void window.open('bigphoto.php?path=" + path + "&name=" + name + "', '1', 'width=187,height=290,directories=no,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no');");
};


В остальных кадрах код привязан к images_[i], может возможно как-то прикрутить onRelease к примеру к массиву, что-то типа array.onRelease = {}
И дело в том что мне нужно будет определить какой именно был нажат мувик, т.к. нужо будет определить имя фотографии и ее размер.

DeadMorozz 17.08.2005 16:48

Вот так можно передавать клип в переменную, например ;)
Код:

var curClip:MovieClip;
clip.onRelease = function(){
  this._parent.curClip = this;
  trace("this is "+this._parent.curClip);
}


serf 17.08.2005 18:43

Все равно не работает.

Когда я размещаю этот кусок кода в 5-ом кадре
clip.onRelease = function(){
getURL("javascript:void window.open('/portfolio/" + path + "/"+this.id+".jpg', '1', 'width=187,height=290,directories=no,location=no,m enubar=no,resizable=no,scrollbars=no,status=no,too lbar=no');");

То в clip только последний мувик, и кликнуть можно только по последнему мувику,
а если этот код поместить в цикл FOR в первом кадре то вообще ничего кликнуть нельзя. Как можно сослаться на какую то одну общую переменную или может как-то можно ссылку сделать?

serf 17.08.2005 19:23

Большое спасибо, все заработало.

Нужно было в 5-ом кадре сделать так:

for (i=1; i<=kol; i++)
{
eval("images_"+i).onRelease = function(){
photo_width = this._width;
photo_height = this._height;
getURL("javascript:void window.open('bigphoto.php?path=" + path + "&name=" + i + ".jpg', '" + photo_height + "', 'width=" + photo_width + ",height=" + i + ",directories=no,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no');");

}
}

Только вот одна проблема вылезла, как получить имя фотографии, все имена числовые 1,2....n

В данном случае i получается равна последнему номеру фотографии + 1 и соответственно загружается только последняя фотография в новое окно.

Штрек 17.08.2005 23:04

eval("images_"+i).i = i;

DeadMorozz 18.08.2005 12:26

В данном случае i получается равна последнему номеру фотографии + 1 и соответственно загружается только последняя фотография в новое окно.
До сих пор не понимаю, в чем рульность разноса всей этой колбасы по кадрам, но проблема с последним i, в принципе, довольно стара.

Дело в том, что когда создаешь несколько клипов с экшенами по ним при проходе циклом, значение i в каждом из них равняется kol.
Борется эта бочина раздачей каждому клипу значения i в локальную переменную id.
Присмотрись к моему старому коду:
Код:

for (i=1; i<=kol; i++){
        var clip:MovieClip = _root.createEmptyMovieClip("images_" + i + "", i);
        clip.loadMovie("./portfolio/" + path + "/" + i + ".jpg", "images_" + i + "");
        var clip.id:Number = i;
        clip.onRelease = function(){
                getURL("javascript:void window.open('/portfolio/" + path + "/"+this.id+".jpg', '1', 'width=187,height=290,directories=no,location=no,m  enubar=no,resizable=no,scrollbars=no,status=no,too  lbar=no');");
        }
}



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

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