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

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


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭