一个简单的事件应用
在深入分析和理解之前,我们还是以简单的一个例子入手,来学习一下如何使用OpenLayers 3中的事件来做一个简单的事,从而熟悉整个流程。 用鼠标点击下面这个地图,将弹出一个对话框,显示点击位置的经纬度:
代码如下:
<div id="map" style="width: 100%"></div>
<script type="text/javascript">
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map',
view: new ol.View({
center: ol.proj.transform(
[104, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 10
})
});
// 监听singleclick事件
map.on('singleclick', function(event){
// 通过getEventCoordinate方法获取地理位置,再转换为wgs84坐标,并弹出对话框显示
alert(ol.proj.transform(map.getEventCoordinate(event), 'EPSG:3857', 'EPSG:4326'));
})
</script>
代码很简单,但需要注意的是,任意的事件应用,必然会有三个步骤:
- 找准事件发送者,比如上面这个例子,
map
就是事件发送者。 如何找到它呢? 一般都是要交互的对象。 - 找准事件名称,比如上面例子中的
singleclick
,切忌不要随便想象,或者按照惯例来写名称,初次使用,请一定参照API文档,不然后果自负。 如何参看一个类有什么事件? 请参见看懂API。 - 编写事件响应函数,在OpenLayers中,事件发送者都会有一个名字为
on
的函数,调用这个函数,就能监听指定的事件,响应函数listener
具有一个参数event
,这个event
类就对应于API文档中事件名称后边括号里的类。
这三个步骤缺一不可,如果使用过jquery
监听事件,应该对此比较熟悉。 除此之外,关于OpenLayers 3中的事件应用,还有下面两点需要说明:
- 几乎OpenLayers 3中所有的类,都能监听事件和触发事件,因为它们都继承于类
ol.Observable
,这个类甚至是ol.Object
的父类。 如此可见,OpenLayers在整个引擎中,是多么的依赖于事件通信。 - 而OpenLayers 3的整个事件机制,又是基于Google的
Closure Library
。所以如果你对这个库熟悉,那么对OpenLayers 3提供的事件机制会比较熟悉。
如果仅限于直接使用OpenLayers 3中的事件,就没有必要深入源码去探个究竟,只要遵照约定对事件进行应用就好。