Как мне симулировать событие щелчка мышью - PullRequest
1 голос
/ 30 января 2011

Я пытаюсь показать первое изображение моей галереи изображений, когда оно загружено. Как бы я смоделировал событие щелчка мыши, которое передаст значение события в функцию?

Вот мой код:

private function createThumbContainer(my_X:Number, my_Y:Number):void{
    ThumbsContainerMC = new MovieClip();
    ThumbsContainerMC.buttonMode = true;
    ThumbsContainerMC.x = my_X;
    ThumbsContainerMC.y = my_Y;
    addChild(ThumbsContainerMC);

    // Here I am trying to enter displayImg() with the value of 0 in my evt.target.name
    //ThumbsContainerMC.getChildByName("name").dispatchEvent(new Event(MouseEvent.CLICK));

    ThumbsContainerMC.addEventListener(MouseEvent.CLICK, displayImg);
}

private function displayImg(evt:MouseEvent):void {  

    var imgURL = imgList[Number(evt.target.name)];
    imgTitle.text = imgURL.@label;

    if (evt.target.name != activeImg) {
        imgLoader.load(new URLRequest(imgURL));
    }
    activeImg = evt.target.name;
}

Ответы [ 4 ]

4 голосов
/ 30 января 2011

Тебе не обязательно. Просто переместите код displayImg в функцию со строковым аргументом. Теперь он будет вызываться без события мыши. Что-то вроде:

private function createThumbContainer(my_X:Number, my_Y:Number):void{
    ThumbsContainerMC = new MovieClip();
    ThumbsContainerMC.buttonMode = true;
    ThumbsContainerMC.x = my_X;
    ThumbsContainerMC.y = my_Y;
    addChild(ThumbsContainerMC);

    // Here I am trying to enter displayImg() with the value of 0 in my evt.target.name    
    loadImg("0"); 

    ThumbsContainerMC.addEventListener(MouseEvent.CLICK, displayImg);
}

private function Img_Clicked(evt:MouseEvent):void {  

   loadImg(evt.target.name);

}


private function loadImg(String targetName) {

    var imgURL = imgList[Number(targetName)];
    imgTitle.text = imgURL.@label;

    if (targetName != activeImg) {
        imgLoader.load(new URLRequest(imgURL));
    }
    activeImg = targetName;

}
4 голосов
/ 30 января 2011

Также обычной практикой является использование аргумента объекта события необязательным и реализация поведения по умолчанию, например, так (обратите внимание, что int будет лучшим типом числа для использования здесь при доступе к индексу массива):

private function createThumbContainer(my_X:Number, my_Y:Number):void{
    ThumbsContainerMC = new MovieClip();
    ThumbsContainerMC.buttonMode = true;
    ThumbsContainerMC.x = my_X;
    ThumbsContainerMC.y = my_Y;
    addChild(ThumbsContainerMC);

    // Here I am trying to enter displayImg() with the value of 0 in my evt.target.name
    //ThumbsContainerMC.getChildByName("name").dispatchEvent(new Event(MouseEvent.CLICK));

    displayImg();
    ThumbsContainerMC.addEventListener(MouseEvent.CLICK, displayImg);
}

private function displayImg(evt:MouseEvent = null):void {  

    var imgIndex:int = evt ? int(evt.target.name) : 0;

    var imgURL = imgList[imgIndex];
    imgTitle.text = imgURL.@label;

    if (imgIndex != activeImg) {
        imgLoader.load(new URLRequest(imgURL));
    }
    activeImg = imgIndex;
}
3 голосов
/ 30 января 2011

Конечно, вы можете вручную отправить MouseEvent.CLICK на изображение:

myContainer.dispatchEvent (new MouseEvent(MouseEvent.CLICK)); 

Остерегайтесь, однако, автоматизация пользовательских событий часто приводит к сбоям в программе: что, если пользователь нажимает сначала где-то еще, может быть, вы хотите подключить других слушателей и т. Д.

Я считаю более полезным разделять функции: обработчик события должен содержать только обработку события, displayImg станет отдельным методом.

private function onThumbClick (ev:MouseEvent) : void {
    var name:String = evt.target.name;
    displayImg ( name );
}

private function displayImg ( name:String ) : void {
    var imgURL = imgList[parseInt (name)];
    imgTitle.text = imgURL.@label;

    if (name != activeImg) {
        imgLoader.load(new URLRequest(imgURL));
    }
    activeImg = name;
}

Затем вы можете позвонить displayImg ("1"); вместо отправки события.

2 голосов
/ 30 января 2011

если вы измените свой код следующим образом:

private function displayImg(evt:MouseEvent = null):void {  
    var name: String = evt ? evt.target.name : '0';
    var imgURL = imgList[Number(name)];
    imgTitle.text = imgURL.@label;

    if (name != activeImg) {
        imgLoader.load(new URLRequest(imgURL));
    }
    activeImg = name;
}

вам нужно будет просто позвонить displayImg();, чтобы создать галерею

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...