事件

地图事件概述

众所周知JavaScript是一种“事件驱动”式编程语言,这表示JavaScript通过事件(events)来与客户端交互,在采用观察者模式的活动中,能够使程序“监听”客户端(宿主浏览器)感兴趣的活动。比方说,在浏览器中,用户通过点击鼠标和击打键盘可以创建在DOM内传播的事件。对某些事件感兴趣的程序会为这些事件注册JavaScript事件监听器,并可触发相应这些事件时执行代码。

GeoGlobeAPI拥有一个自己的事件模型,程序员可监听地图API对象的自定义事件,使用方法和DOM事件类似。但请注意,地图API事件是独立的,与标准DOM事件稍微区别。

事件监听

GeoGlobeAPI中的大部分对象都采用events.on方法,您可以通过该方法来监听对象事件。例如,GeoGlobeAPI支持的事件包括mouseover、mouseout、mousedown、mouseup、mousemove、click、dblclick、rightclick、dblrightclcick、resize、focus、blur、preaddlayer、addlayer、zoomend、popupopen、popupclose、addmarker、removemarker、clearmarkers、dragstart、drag、dragend、changebaselayer、removelayer、changelayer、movestart、move等事件。在一定的客户端操作下这些事件会被触发,事件一触发,绑定的监听函数会得到执行,相应的事件参数e,比如当用户点击地图时,e参数会包含鼠标所对应的地理位置point。

有关地图API对象的事件,请参考完整的API参考文档。 addEventListener方法有两个参数:监听的事件名称和事件触发时调用的函数。在下面示例中,每当用户点击地图时,会弹出一个警告框。

var map = new Geo.View2D.Map("mapcontainer");//这个mapcontainer就是存放地图的dom容器id
map.setCenter(new Geo.LonLat(116.404, 39.915), 11);
map.events.register("click", map, function(e){
	//e是一个event事件对象,此时type是click
});
事件参数和this

在标准的DOM事件模型中(DOM Level 2 Events),事件监听函数会传递一个事件对象e(在ie中是全局event对象),在e中可以获取有关该事件的信息。同时在监听函数中this会指向触发该事件的DOM元素。 GeoGlobalAPI的事件模型与此类似,在事件监听函数中传递事件对象e,每个e参数至少包含事件类型(type)和触发该事件的对象(target)。 API还保证函数内的this指向触发(同时也是绑定)事件的API对象。

移除监听事件

当您不再希望监听事件时,可以将事件监听移除。每个事件对象提供了unregistere方法用来移除事件。

下面示例中,用户第一次点击地图会触发事件监听函数,在函数内部对事件监听进行了移除,因此后续的点击操作则不会触发监听函数。

var map = new Geo.View2D.Map("mapcontainer");//这个mapcontainer就是存放地图的dom容器id
map.setCenter(new Geo.LonLat(116.404, 39.915), 11);
map.events.register("click", map, unRegister);
function unRegister(){
	 map.events.unregistere("click", unRegister);
};