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事件中:
代码:
2. 关于事件重复激发:
在IE中,由于IE事件模型的原因,当元素重叠时,激发事件会做用到每一个元素上。但这对于地图来说是不必要的,比如为map和map.graphics分别注册了点击的响应函数,则当点击在graphics上时,也会激发map的click事件。
代码:
以上代码执行一个task,task执行完后返回的graphic绘制到了地图上,若想避免点击此graphic时也激发map的click事件,则通过停止evt来做到。
修改recenterMap方法:
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结构:
4.onLoad(map) 当第一个图层加载完毕后激发
很多对图层的操作一定要等到地图加载完毕后才能正确执行,因为很可能会调用到相关图层的属性,而图层是异步加载的(map.addLayer);若图层没有加载完就会找不到这些属性而引发错误。
所以,关于对图层的操作最好这样作比较保险:
代码:
这里利用map的loaded属性判断地图是否加载完毕,若完毕则直接执行doAfterLoaded,否则将doAfterLoaded注册给地图的onLoad事件,以确保只有在地图加载完毕后才执行doAfterLoaded.
5.onLayersAddResult(results)当全部图层加载后激发,可在此事件中操作已加载到地图中的全部图层
参数:
Results:<Object[]>
Object结构:
6.onLayerAddResult(layer,error) ,每一个图层加载完毕后都会激发此事件
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) ,每一个图层加载完毕后都会激发此事件
相关文章推荐
- ArcGIS Server Rest for Javascript API 学习教程-1
- ArcGIS Server Rest for Javascript API 学习教程-3
- ArcGIS Server Rest for Javascript API 学习教程-4
- ArcGIS API For Javascript开发利器(智能提示)和学习地址
- ArcGIS API for JavaScript 4.2学习笔记[23] 没有地图如何进行查询?【FindTask类的使用】
- ArcGIS API for JavaScript 4.2学习笔记[10] 2D添加指北针widget、视图保存、视图padding(第二章完结)
- ArcGIS API for JavaScript 4.2学习笔记[3] 官方第二章Mapping and Views概览与解释
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Toc功能(二)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现基本的地图功能(一)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现基本的地图功能(一)
- ArcGIS API for JavaScript 4.4学习笔记[新] AJS4.4和AJS3.21新特性
- ArcGIS API for JavaScript 4.2学习笔记[18] 搜索小部件
- ArcGIS API For Javascript开发利器(智能提示)和学习地址
- ArcGIS API for JavaScript 4.2学习笔记[4] 第二章其余感兴趣的例子
- ArcGIS API for JavaScript 4.2学习笔记[26] 缓冲区分析【基于geometryEngine工具类】
- ArcGIS API For Flex对ImageServer发布的服务进行渲染及RasterFunction支持函数(学习笔记)
- ArcGIS API for JavaScript开发教程系列(三)之图层列表控件
- ArcGIS Server for JavaScript api 3.3 离线部署
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)