天天看点

《JavaScript构建Web和ArcGIS Server应用实战》——2.6 地图事件

本节书摘来自异步社区《javascript构建web和arcgis server应用实战》一书中的第2章,第2.6节,作者: 【美】eric pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。

在编程世界里,事件是发生在应用程序中的动作。通常,这些事件通过终端用户触发,包括鼠标单击、鼠标拖拽和键盘动作,但是它还包括数据的发送和接收、组件修改和其他操作。

arcgis api for javascript是一个异步的api,遵循应用程序注册(发布)事件的监听(用户)中的发布/订阅模式。图2-15说明了该过程。监听器负责监控应用程序中的事件,然后触发一个处理函数来响应事件。多个事件可以注册到同一个监听器中。dojo中的on()方法就是这样的一个事件处理程序。

《JavaScript构建Web和ArcGIS Server应用实战》——2.6 地图事件

你可能还记得,arcgis serverjavascriptapi建立在dojo之上。使用dojo,事件通过dojo的on()方法注册给处理程序。该方法接收三个参数,仔细观察图2-16,你会对事件注册有更好的理解。

《JavaScript构建Web和ArcGIS Server应用实战》——2.6 地图事件

https://yqfile.alicdn.com/d3fe0d9b8745f9855e1738cd87a3ea3fd309d573.png" >

我们调用带参数的on()方法,参数包括map、click和displaycoordinates。前面两个参数代表对象和我们需要注册的事件。在这种情况下,意味着我们正在为map对象注册click事件。在地图范围内,每当用户单击鼠标就会触发此事件。最后一个参数displaycoordinates代表事件的监听器。因此,每当map对象的click事件触发时,将会触发displaycoordinates函数,它将运行并报告地图当前范围。虽然事件和注册的处理取决于环境的变化,但是注册的方法是一样的。

每次事件发生时,event对象将产生。该event对象包括额外的事件信息,比如鼠标按钮被单击或者键盘某个按键被按下。这个对象会自动传递到事件处理程序中检查。如下列代码所示,你可以看到event对象作为一个参数传递到了处理程序中。这是一个动态对象,它的属性也会根据被触发的事件类型而发生变化。

api中不同对象有着不同的事件。但是,你要牢记不要用监听器来注册每一个事件。只有那些应用程序中需要的事件才需要注册。当一个事件没有使用监听器进行注册时,该事件会被忽略。

map对象包含多种不同响应事件,包括各种鼠标事件、范围改变事件、底图改变事件、键盘事件、图层事件、平移和缩放事件以及更多其他事件。应用程序中可以响应任意这些事件。在接下来的章节中,我们将学习其他对象可用的事件。

在不需要的时候,从处理函数中断开事件是一个好的编程习惯。这通常在当用户从页面导航离开或者关闭浏览器窗口时完成。下列代码显示了如何简单地通过调用remove()方法完成移除单击事件。

继续阅读