Javascript 自定义缩放控件导致超出最大调用堆栈大小错误
在iOS上使用Google Maps JavaScript API时,我试图更改缩放增量。例如,我不想从zoom 14变为zoom 15,而是希望它直接变为zoom 16,然后变为zoom 18,依此类推。。。当用户使用收缩缩放手势时 我知道我可以通过按钮来实现这一点,但我似乎找不到一个解决办法来实现从捏到缩放的手势。我意识到需要跟踪Javascript 自定义缩放控件导致超出最大调用堆栈大小错误,javascript,google-maps,Javascript,Google Maps,在iOS上使用Google Maps JavaScript API时,我试图更改缩放增量。例如,我不想从zoom 14变为zoom 15,而是希望它直接变为zoom 16,然后变为zoom 18,依此类推。。。当用户使用收缩缩放手势时 我知道我可以通过按钮来实现这一点,但我似乎找不到一个解决办法来实现从捏到缩放的手势。我意识到需要跟踪zoom\u changed事件 使用map.setZoom(zoom+2)时,我得到一个错误,超过了最大调用堆栈大小和map.setZoom(zoom-2)分别添
zoom\u changed
事件
使用map.setZoom(zoom+2)时,我得到一个错误,超过了最大调用堆栈大小
代码>和map.setZoom(zoom-2)代码>分别添加到第17行和第19行时
检查此JSFIDLE:。这是我需要帮助的部分:
if (useragent.indexOf('iPhone') != -1) {
google.maps.event.addListener(map, 'zoom_changed', function () {
if (map.getZoom() > zoom) {
alert("ZOOMED IN from Level " + zoom);
} else if (map.getZoom() < zoom) {
alert("ZOOMED OUT from Level " + zoom);
}
zoom = map.getZoom();
});
}
if(useragent.indexOf('iPhone')!=-1){
google.maps.event.addListener(映射'zoom_changed',函数(){
if(map.getZoom()>缩放){
警报(“从级别放大”+缩放);
}else if(map.getZoom()
顶部的按钮演示了我试图实现的功能,但使用了“收缩到缩放”手势。如果您在问题中指向的位置添加这些行,您将在事件zoom\u changed
内触发事件zoom\u changed
,这将创建stackoverflow,因为它永远不会停止触发事件
if (useragent.indexOf('iPhone') != -1) {
google.maps.event.addListener(map, 'zoom_changed', function () {
if (map.getZoom() > zoom) {
map.setZoom(zoom + 2); //This will trigger "zoom_changed" again
} else if (map.getZoom() < zoom) {
map.setZoom(zoom - 2); //This will trigger "zoom_changed" again
}
zoom = map.getZoom();
});
}
简单方法:
仅当当前缩放不是偶数时设置新缩放(这将停止无限循环)
Hmm我仍然会遇到同样的错误。更新的JSIDLE:。不应该oldZoom+2
和oldZoom-2
应该在map.setZoom()内代码>?使用alert
标签,我可以看到缩放增加了2,但地图上没有设置。我不知道为什么会被否决……谢谢Molle博士。这是最好的解决办法。
if (useragent.indexOf('iPhone') != -1) {
google.maps.event.addListener(map, 'zoom_changed', function () {
var newZoom = map.getZoom(), oldZoom = zoom;
if (newZoom > oldZoom) {
oldZoom + 2;
} else if (newZoom < oldZoom) {
oldZoom - 2;
}
zoom = oldZoom;
map.setZoom(oldZoom);
});
}
google.maps.event.addListener(map,'zoom_changed',function(){
var z=this.getZoom();
if(z%2){//when zoom is a odd number
var fx=((!isNaN(this.get('z'))&&this.get('z')<z))?2:0;
this.setZoom(Math.floor(z/2)*2+fx);
}else{
this.set('z',z);
}
});