缩放事件侦听器之前的 Javascript OpenLayers
Javascript OpenLayers before zoom event listener
我正在尝试将 OpenLayers 设置为在缩放开始之前不显示矢量图层,并在缩放结束后使其重新出现。我已经像这样建立了缩放结束部分:
map = new OpenLayers.Map('map_element', { eventListeners: { "zoomend": mapEvent}});
function mapEvent(event) {
if(event.type == "zoomend") {
hide_vector_layer();
}
}
但是我在文档中没有看到任何类型的事件侦听器来开始放大。有一个"移动启动",涵盖移动、平移和缩放。不幸的是,我不能使用"movestart",因为我不希望图层在平移过程中消失。你会认为会有一个"zoomstart",因为有一个"zoomend"。
我尝试这样做的原因是,当我使用 Google 地图作为基础图层时,我不喜欢矢量图层以不同的速率缩放的方式。它看起来是错误的,看起来所有功能都不准确,即使它们在缩放完成后落在正确的位置。
有什么建议吗?
这是一个很容易将"BeforeZoom"事件添加到OpenLayers。只需将下面的代码添加到您创建地图对象的位置即可。
map.zoomToProxy = map.zoomTo;
map.zoomTo = function (zoom,xy){
//Your Before Zoom Actions
//If you want zoom to go through call
map.zoomToProxy(zoom,xy);
//else do nothing and map wont zoom
};
工作原理:
对于任何类型的缩放活动,OpenLayers API最终都会调用名为zoomTo的函数。因此,在覆盖它之前,我们将该函数复制到一个名为"zoomToProxy"的新函数中。我们覆盖它并添加我们的条件缩放逻辑。如果我们希望发生缩放,我们只需调用新的代理函数:)
您应该覆盖 OpenLayers.Map 的 moveTo 和 moveByPx 方法,以消除除缩放之外的任何操作的 movestart 事件触发。
我遇到了与 OP 相同的问题,我试图使用 drnextgis 的解决方案来解决它。但不幸的是,它并没有完全起作用:OpenLayers.Map.moveTo 中的 zoomChanged
属性不仅可以在缩放级别更改时进行true
,还可以在调整地图大小时进行计算。
我的地图是用户浏览器窗口的 100%,因此如果他们调整窗口大小,则会触发事件。这对我来说是不可取的,因为我只想在缩放级别实际更改时触发事件。我的解决方案是创建一个名为"zoomstart"的新事件,我将其插入OpenLayers.Map.moveTo的顶部。代码如下:
var getZoom = this.getZoom();
if ( !!getZoom && !!zoom && this.isValidZoomLevel(zoom) && getZoom != zoom )
this.events.triggerEvent("zoomstart", zoom);
此代码会将新的缩放级别传递给注册到 zoomstart
的事件侦听器,在我的情况下,我确定地图的受限范围并根据新的缩放级别执行其他操作。
愿和平与你们同在。
"movestart" 处理 "zoomstart"。要检测是否启动了缩放,请尝试:
map.events.register("movestart",map, function(e) {
if(e.zoomChanged)
{
//zoom start code here
}
});
Shaunak"的解决方案对我来说效果很好。我想将缩放限制在 11 以下,因此将他的代码编辑为
if (zoom > 11) {
map.zoomToProxy(zoom, xy);
}
- javascript window.open将无法在Chrome控制台上工作
- Javascript window.open()toolbar=no不起作用
- 在window.open()生成的窗口中执行JavaScript
- 检查window.open支持-JavaScript
- javascript window.open(),并在新窗口中搜索DOM
- Javascript窗口.open中的UTF8字符串将被UIWebview's应该启动LoadWithReque
- Googlemaps Javascript API KML layer - Using Open charge map
- 为什么页面在javascript:window.open之后出现空白并带有“[Object]”
- IPAD safari 浏览器不支持 window.open JavaScript 方法
- Javascript窗口.open不工作
- window.open阻止target_blank之前的Javascript GET请求
- Javascript-window.open()弹出窗口大小问题
- 在Javascript中的一个Open()记录集函数中使用多个查询
- 通过Ajaxrequest.open从Javascript获取变量到PHP文件
- Javascript-使用window.open()进行基本身份验证
- Mapquest Open Javascript API addOptimizedRoute
- Javascript open.window 获取字段值,然后将值插入父窗口
- Spring Source Tool Suite (等于 Eclipse IDE ) javascript “Open
- Angular/JS Javascript Open IE FIle上传输入,点击取消/打开多次打开
- ASP / Javascript Open Source Web Image Resizer