缩放时保持居中
在Google地图中,当我放大或缩小时,我希望能够将地图中心保留在我所在位置的标记上。 这是Ingress所做的事情,双击(或双击)或捏住的地方并不重要,地图仍然位于标记的中心。 所以有可能......
我现在想出的最好的是:
google.maps.event.addListener(mymap, 'zoom_changed', function() {
mymap.setCenter({lat: myLoc.lat, lng: myLoc.lon});
})
但它远非完美,它只是在用户已经放大后重新映射地图。
非常感谢 !
[编辑]绝对没有什么帮助在API参考...或其他地方我是盲目的,错过了!
纯粹使用Javascript
检查我的示例代码:Fiddle URL:https://jsfiddle.net/vh3gqop0/5/
var map, i = 12;
function initialize() {
var myLatlng = new google.maps.LatLng(46.769603, 23.589957);
var mapOptions = {
center: myLatlng,
zoom: i,
scrollwheel: false,
disableDoubleClickZoom: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Any Title'
});
}
google.maps.event.addDomListener(window, 'load', initialize);
$( document ).ready(function() {
$('#map_canvas').on("wheel", function(evt){
// console.log(evt.originalEvent.deltaY);
if(evt.originalEvent.deltaY > 0){
map.setZoom(++i);
}else {
map.setZoom(--i);
}
});
});
#map_canvas{
height:400px;
width:100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC9d3jaUX6Qdr0Uzvq6fQXVmZ1PBuHEVAQ"></script>
<div id="map_canvas"></div>
我不知道为什么你把这个问题标记为Javascript和Android。 在Android上,您需要将MapView包裹在另一个视图中,并检测onInterceptTouchEvent
双击动作,如果您的类可以覆盖FrameLayout
,则可以覆盖它。 然后返回true以防止地图处理此事件,而您处理它。
有关完整的代码,请在此处查看我的答案:https://stackoverflow.com/a/30118649/764897
不幸的是Google Maps Api不提供这种行为。
以下示例不需要jQuery,并且支持双击和鼠标滚动,但如果需要,您可以添加更多事件。
在Codepen中查看
禁用:
添加dblclick
和zoom_changed
事件地图,然后在mousewheel
在画布上的事件。
我已经评论了该代码,希望这适用于你的情况。 请记住,您需要为所有浏览器和设备规范鼠标滚轮速度。 Hammer.js是一个很好的库。
var map, zoom;
function initialize() {
// The white house!
var myLatLng = new google.maps.LatLng(38.8977, -77.0365);
// Default zoom level
zoom = 17;
// Keep a reference for evens
var $map = document.getElementById("map");
// Disable scrolling + double-click + dragging
map = new google.maps.Map($map, {
zoom: zoom,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false,
disableDoubleClickZoom: true,
//draggable: false
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map
});
// EVENTS
// Double Click: event zoom by 1
map.addListener('dblclick', function(e) {
zoomHandler(e.latLng, 1);
});
// Zoom changed: update current zoom level
map.addListener('zoom_changed', function(e) {
// Using a timeout because `getZoom()` does not return a promise.
setTimeout(function() {
zoom = map.getZoom();
}, 50);
});
// Dom event: On mousewheel
$map.addEventListener('mousewheel', wheelEvent, true);
}
// Mouse Scrolling event
function wheelEvent(event) {
if (event.deltaY > 1)
zoomHandler(event, -1);
else
zoomHandler(event, 1);
}
// Zoom in/out
function zoomHandler(event, zoomin) {
zoom += zoomin;
map.setZoom(zoom);
}
google.maps.event.addDomListener(window, 'load', initialize);
#map {
width: 100%;
height: 240px;
}
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC9d3jaUX6Qdr0Uzvq6fQXVmZ1PBuHEVAQ"></script>
链接地址: http://www.djcxy.com/p/81503.html