Inclui licença e suporte para empresas
O ActionScript nos arquivos SWF é orientado a eventos, o que significa que o ActionScript responde a interações gerando eventos e espera que um programa ouça eventos interessantes. Por exemplo, em um arquivo Flash, as interações de mouse e teclado do usuário criam eventos que se propagam pela interface do Flash. Os eventos também podem ser gerados internamente pelo sistema quando ocorre uma alteração de estado. Os programas interessados em determinados eventos registrarão escutas de evento do ActionScript para esses eventos e executarão o código quando os eventos forem recebidos.
Normalmente, os eventos da interface do usuário do Flash acontecem desde de "destinos" localizados no último nó de uma hierarquia até os objetos do recipiente, disparando eventos por toda a cadeia de objetos. Um clique em um DisplayObject, por exemplo, pode disparar um evento MouseEvent.MOUSE_DOWN nesse objeto e passar esse evento para níveis superiores na hierarquia para quaisquer elementos.
A API do Google Maps para Flash agrega valor a esse modelo de evento definindo eventos personalizados para objetos da API. É importante observar que os eventos da API do Google Maps para Flash são separados e distintos dos eventos Flash padrão. Os eventos MapEvent podem surgir de objetos de destino a objetos do recipiente, embora os eventos na API do Google Maps para Flash sejam normalmente projetados para destinos específicos.
Os eventos na API do Google Maps para Flash são definidos em classes específicas (como MapEvent) que contêm uma enumeração de todos os eventos específicos a essa API. Alguns desses eventos são eventos de interface do usuário, enquanto outros são relacionados às alterações de estado no próprio ambiente da API do Google Maps. Alguns eventos são projetados para um objeto específico. Por exemplo, um evento MapEvent.MAP_READY é disparado quando o objeto do mapa é inicializado e está pronto para receber comandos. Esse evento deve ser manipulado apenas por um objeto Map.
Outros eventos podem ser aplicados a uma grande variedade de objetos. Por exemplo, os eventos CLICK, DOUBLE_CLICK e DRAG_STEP do MapMouseEvent podem ser anexados aos objetos ou sobreposições Map e podem exigir ações diferentes dependendo do objeto que está recebendo o evento.
Para obter uma lista completa de constantes de evento de mapa, consulte a documentação de referência sobre MapEvent, MapMouseEvent e MapMoveEvent.
Para se inscrever para receber notificações desses eventos, use o método Map.addEventListener(). Esse método considera como argumentos um nome de evento e uma função a ser chamada quando ocorre o evento especificado. Por exemplo, este snippet de código mostra um alerta sempre que o usuário clica no mapa:
private function onMapReady(event:MapEvent):void {
map.setCenter(new LatLng(37.4419, -122.1419), 13, MapType.NORMAL_MAP_TYPE);
map.addEventListener(MapMouseEvent.CLICK, onMapClick);
}
private function onMapClick(event:MapMouseEvent):void {
map.openInfoWindow(event.latLng,
new InfoWindowOptions({title: "Click Event", content: "You clicked the map!"}));
}
Ver exemplo (EventSimple.html)
Ver código-fonte (EventSimple.mxml)
As escutas também podem determinar o contexto do evento. No exemplo de código abaixo, é exibida a latitude e a longitude do centro do mapa depois que o usuário arrasta o mapa.
private function onMapReady(event:MapEvent):void {
map.setCenter(new LatLng(37.4419, -122.1419), 13, MapType.NORMAL_MAP_TYPE);
map.addEventListener(MapMoveEvent.MOVE_END, onMapMoveEnd);
}
private function onMapMoveEnd(event:MapMoveEvent):void {
var center:LatLng = getCenter();
map.openInfoWindow(getCenter(),
new InfoWindowOptions({title: "Move Event", content: "MOVE_END generated on Map"}));
}
Ver exemplo (EventContext.html)
Ver código-fonte (EventContext.mxml)
Durante a execução de uma escuta de evento, geralmente é vantajoso ter dados privados e persistentes anexados a um objeto. O ActionScript suporta closures que permitem que funções internas acessem variáveis externas. Os closures são úteis em escutas de evento para acessar variáveis que não são geralmente anexadas aos objetos nos quais ocorrem os eventos.
O exemplo a seguir usa um fechamento de função na escuta de evento para atribuir uma mensagem secreta a um conjunto de marcadores. Clicar em cada um dos marcadores apresentará um trecho da mensagem secreta, que não está contida no marcador propriamente dito.
private var message:Array = ["This","is","the","secret","message"];
private function onMapReady(event:MapEvent):void {
map.setCenter(new LatLng(37.4419, -122.1419), 13, MapType.NORMAL_MAP_TYPE);
// Add 5 markers to the map at random locations
// Note that we don't add the secret message to the marker's instance data
var bounds:LatLngBounds = getLatLngBounds();
var southWest:LatLng = bounds.getSouthWest();
var northEast:LatLng = bounds.getNorthEast();
var lngSpan:Number = northEast.lng() - southWest.lng();
var latSpan:Number = northEast.lat() - southWest.lat();
for (var i:Number = 0; i < 5; i++) {
var latlng:LatLng = new LatLng(southWest.lat() + latSpan * Math.random(),
southWest.lng() + lngSpan * Math.random());
map.addOverlay(createMarker(latlng, i + 1));
}
}
// Creates a marker at the given point
// Clicking the marker will hide it
private function createMarker(latlng:LatLng, number:Number):Marker {
var marker:Marker = new Marker(latlng);
marker.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void {
var myTitle:String = "<b>#" + number + "</b>";
var myContent:String = message[number -1];
map.openInfoWindow(latlng, new InfoWindowOptions({titleHTML: myTitle, contentHTML: myContent}));
});
return marker;
}
Ver exemplo (EventClosure.html)
Ver código-fonte (EventClosure.mxml)
Quando uma escuta de evento deixa de ser necessária, você deve removê-la. O exemplo abaixo responde a um clique colocando um marcador no mapa e removendo a escuta de evento imediatamente. Você pode remover uma escuta de evento da própria escuta de evento.
private function onMapReady(event:MapEvent):void {
map.setCenter(new LatLng(37.4419, -122.1419), 13, MapType.NORMAL_MAP_TYPE);
map.addEventListener(MapMouseEvent.CLICK, onMapClick);
}
private function onMapClick(event:MapMouseEvent):void {
map.openInfoWindow(getCenter(),
new InfoWindowOptions({title: "Click Event", content: "You clicked the Map!"}));
var marker:Marker = new Marker(getCenter());
map.addOverlay(marker);
map.removeEventListener(MapMouseEvent.CLICK, onMapClick);
}