当前位置:首页 > 开发教程 > js/jQuery教程 >

ArcGIS Server Rest for Javascript API 学习教程

时间:2013-04-25 11:01 来源:网络整理 作者:采集侠 收藏

上一节我们总结了Map类的一些常用属性和基本配置,那么这一节来学习一下Map的常用事件。1.首先我们需要了解一下这些事件的参数evt,这个参数对原本的浏览器事件

上一节我们总结了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) ,每一个图层加载完毕后都会激发此事件



js/jQuery教程阅读排行

最新文章