Google Maps Api - 不要更改 Zoom 上的地图中心

ran*_*y04 1 javascript google-maps google-maps-api-3

是否可以在放大/缩小事件中保持相同的地图中心?无论是使用滚轮、双击还是使用缩放控件,其行为都应该相同。

我注意到使用滚轮放大/缩小时,地图上的鼠标指针位置存在偏差,我在文档中没有找到任何选项,但覆盖该偏差将是理想的选择。

这是我如何初始化地图的简单小提琴。

var map = new google.maps.Map(document.getElementById("map_div"), {
    center: new google.maps.LatLng(33.808678, -117.918921),
    zoom: 15,
    disableDefaultUI: true
  });
Run Code Online (Sandbox Code Playgroud)

ran*_*y04 5

按照@Adam 对评论的建议,我禁用了滚轮缩放,以及实例化地图时的双击缩放,并添加了事件侦听器以使用我自己的实现来处理这些事件。

这是一个工作小提琴和解释的代码:

/*
 * declare map as a global variable
 */
var map;
/*
 * use google maps api built-in mechanism to attach dom events
 */
google.maps.event.addDomListener(window, "load", function() {
  var myMap = document.getElementById("map_div");
  /*
   * create map
   */
  var map = new google.maps.Map(myMap, {
    center: new google.maps.LatLng(33.808678, -117.918921),
    zoom: 15,
    disableDefaultUI: true,
    scrollwheel: false,
    disableDoubleClickZoom: true
  });
    //function that will handle the wheelEvent
  function wheelEvent(event) {
    var e = window.event || e; // old IE support
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); //to know whether it was wheel up or down
    map.setZoom(map.getZoom() + delta);
  }

  function zoomIn() {
    map.setZoom(map.getZoom() + 1);
  }

  //add a normal event listener on the map container
  myMap.addEventListener('mousewheel', wheelEvent, true);
  myMap.addEventListener('DOMMouseScroll', wheelEvent, true);

  //same with the double click
  myMap.addEventListener('dblclick', zoomIn, true);

  //add center changed listener for testing
  google.maps.event.addListener(map, 'center_changed', function() {
    console.log("this is what i'm trying to avoid");
  });
});
Run Code Online (Sandbox Code Playgroud)