【发布时间】:2015-11-17 03:28:08
【问题描述】:
在我的 Ionic/Angular 移动应用中,我有一个类似 Uber 的地图,基本上用户可以在其中拖动地图来选择一个位置,并且中心始终固定有一个标记。
所以,我的 HTML 如下所示:
<ion-view cache-view="false" view-title="Choose location">
<ion-content has-header="true" class="new-meeting" has-bouncing="false">
<div id="chooseLocationMap" class="full-map"></div>
</ion-content>
</ion-view>
与此相关的 SASS:
.full-map {
width: 100%;
height: 100%;
.center-marker {
position: absolute;
background: url(../img/default-marker.svg) -10px -5px;
top: 50%;
left: 50%;
z-index: 1;
width: 40px;
height: 50px;
margin-top: -50px;
margin-left: -22px;
cursor: pointer;
}
}
最后,我的控制器中处理地图的部分是这样的:
function initialize() {
var initialPosition = loadStoredPosition();
var mapOptions = {
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP,
disableDefaultUI: true
};
map = new google.maps.Map(document.getElementById('chooseLocationMap'), mapOptions);
google.maps.event.addListener(map, 'center_changed', function () {
updateStoredPosition(map.getCenter());
});
var markerDiv = document.createElement('div');
markerDiv.className = 'center-marker';
angular.element(map.getDiv()).append(markerDiv);
}
ionic.Platform.ready(initialize);
如您所见,我有两种方法,loadStoredPosition 和 updateStoredPosition,它们只是检索纬度和经度并将其保存到服务中。
这很好,我可以移动地图,每次存储的位置都会正确更新。
问题是,当我离开视图(选择一个位置后)然后返回(位置仍然与上一个相同)时,看起来标记没有指向正确的位置,而是更远一点(它总是相同的偏移量)。
有人知道为什么会这样吗?
编辑:
当我第一次访问视图时,标记出现在正确的位置。但是在我访问视图的所有连续时间中,标记不再指向正确的位置,而是向上几个像素。我还应该提到,视图没有被缓存,所以每次都会重新创建地图。
最后,我注意到的一件奇怪的事情是,当我第一次访问这个视图时,地图可见之后,它会发生一个小的弹跳并略微扩展!
【问题讨论】:
-
您提到标记总是以相同的偏移量关闭;你有一个大概的值吗?
-
我刚查了一下,大约是 30px。有什么理论吗?
-
只是一个想法:SASS 中可能存在错误?
height: 50px; margin-top: -50px;可能无法确保正确居中。 -
我可能会在标记选项中设置标记位置,请参见此处stackoverflow.com/questions/5318795/…,或者如果您离开地图,请尝试 map.remove(),当您再次返回调用初始化时,我遇到了与传单类似的问题+ tomtom 2 周前修复了另一种可能是设置地图边界以始终确保地图容器始终相同的行为
-
@stackg91 我在地图上找不到任何 remove() 函数。因此,我尝试销毁保存地图的 div,但没有改变任何东西!关于将标记添加为 MarkerImage 的另一种解决方案,不幸的是我希望它始终指向地图的中心,无论您移动地图多少(类似 Uber 的地图)。
标签: angularjs google-maps google-maps-api-3 ionic-framework ionic