您的位置:首页 > Web前端 > JavaScript

ArcGIS Server Rest for Javascript API 学习教程-2

2011-10-19 17:31 435 查看
上一节我们总结了Map类的一些常用属性和基本配置,那么这一节来学习一下Map的常用事件。

1.首先我们需要了解一下这些事件的参数evt,这个参数对原本的浏览器事件参数evt做了扩充:

增加了screenPoint, mapPoint。
但是当事件源是一个Graphic时,evt会增加一个graphic属性,表示点击的要素。
注意:map.graphics图层中的要素只有在map加载完毕后才能使用,因此如果为map.graphics图层注册点击事件,则应将代码写在map的onLoad事件中:
代码:
dojo.connect(map, "onLoad",function() {
dojo.connect(map.graphics,"onClick", myGraphicsClickHandler);
});


2. 关于事件重复激发:
在IE中,由于IE事件模型的原因,当元素重叠时,激发事件会做用到每一个元素上。但这对于地图来说是不必要的,比如为map和map.graphics分别注册了点击的响应函数,则当点击在graphics上时,也会激发map的click事件。
代码:

functioninit() {
...
dojo.connect(map, "onClick",executeQuery);
dojo.connect(map, "onLoad",function() {
dojo.connect(map.graphics,"onClick", recenterMap);
}
}

functionexecuteQuery(event) {
query.geometry = event.mapPoint;
queryTask.execute(query, ...);
}

functionrecenterMap(event) {
map.centerAt(event.mapPoint);
}


以上代码执行一个task,task执行完后返回的graphic绘制到了地图上,若想避免点击此graphic时也激发map的click事件,则通过停止evt来做到。
修改recenterMap方法:

functionrecenterMap(event) {
dojo.stopEvent(event);//这句话组织事件继续传播,因此不会被map捕捉到
map.centerAt(event.mapPoint);
}


3.onExtentChange(extent,delta, levelChange, lod) 当前视窗内的地图范围发生变化时激发(一般是在平移或者缩放地图时激发)
参数:
extent<Extent> :地图变化后的视窗范围
delta<Point>:The change in the x and y values from the previous extent. The Point x andy values are in screen units. This point acts as an anchor point, and this partof the map stays
within the map region during the zoom process.
levelChange:<Boolean> 当使用切片资源时,标识当前操作是否进行了缩放。若缩放为true,若平移为false
lod<LOD>:当使用切片资源时,该参数包含了当前缩放级别的详细信息
LOD结构:

{
level:当前缩放级别
resolution:分辨率
scale:比例尺
}


4.onLoad(map) 当第一个图层加载完毕后激发
很多对图层的操作一定要等到地图加载完毕后才能正确执行,因为很可能会调用到相关图层的属性,而图层是异步加载的(map.addLayer);若图层没有加载完就会找不到这些属性而引发错误。
所以,关于对图层的操作最好这样作比较保险:
代码:
if (map.loaded) {
doAfterLoaded();//对图层的操作
}
else{
dojo.connect(map, "onLoad",doAfterLoaded);
}


这里利用map的loaded属性判断地图是否加载完毕,若完毕则直接执行doAfterLoaded,否则将doAfterLoaded注册给地图的onLoad事件,以确保只有在地图加载完毕后才执行doAfterLoaded.

5.onLayersAddResult(results)当全部图层加载后激发,可在此事件中操作已加载到地图中的全部图层
参数:
Results:<Object[]>
Object结构:

{
<Layer> layer,//图层
<Boolean> success,//是否加载成功
<Error> error//若加载失败,描述失败的原因
}


6.onLayerAddResult(layer,error) ,每一个图层加载完毕后都会激发此事件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐