【问题标题】:Google maps zoom controls and markers disappear谷歌地图缩放控件和标记消失
【发布时间】:2013-10-02 15:01:18
【问题描述】:

我在使用谷歌地图时遇到了两个非常奇怪的问题,似乎只在 Chrome/Mac 和 Chrome/Windows 上发生

  1. 如果您单击位于科罗拉多州的第一个图钉并尝试将鼠标向右平移地图,您会注意到缩放控件将开始消失。我已经尝试用 max-width:none; 修复它。所以这不是同一个错误。

  2. 如果您单击位于斯科普里的右侧标记,您会注意到该标记将在缩放级别 20 时消失

更新:如果我在 Chrome 上禁用硬件加速,这两个错误都会得到修复,所以我认为这更像是 Chrome 问题而不是谷歌地图问题。

这里是一个 jsfiddle 链接来重现问题http://jsfiddle.net/sokarovski/rx74P/2/

var posSkopje = new google.maps.LatLng(42.007652282715,21.372894287109034);
var posColorado = new google.maps.LatLng(38.960487365723,-104.76946258545001);

google.maps.visualRefresh = false;
var map = new google.maps.Map(document.getElementById("map_canvas"), {
    center: new google.maps.LatLng(0, 0),
    zoom: 3,
    mapTypeId: google.maps.MapTypeId.HYBRID,
    maxZoom: 20
});

var markerSkopje = new CustomMarker('img.svg');
markerSkopje.setPosition(posSkopje);
markerSkopje.setMap(map);

var markerColorado = new CustomMarker('img.svg');
markerColorado.setPosition(posColorado);
markerColorado.setMap(map);

var zoomOnClick = function(arg1) {
    map.setCenter(this.getPosition());
    map.setZoom(22);
}

google.maps.event.addListener(markerColorado, 'open', jQuery.proxy(zoomOnClick, markerColorado));
google.maps.event.addListener(markerSkopje, 'open', jQuery.proxy(zoomOnClick, markerSkopje));

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 chromium


    【解决方案1】:

    帖子很旧,但问题仍然存在。 对于其他人,偶然发现了这一点;你可以这样做:

    从 google 制作 Markermanager.js 的本地副本并修改 此行(第 107 行)

    发件人:

    me.maxZoom_ = opt_opts.maxZoom || 19;

    收件人:

    me.maxZoom_ = opt_opts.maxZoom || 21;

    【讨论】:

      【解决方案2】:

      代码中的一些问题看这个

      //=========== > Custom Marker Class
      function CustomMarker(opts) {
          this.location_ = null;
          this.div_ = null;
          this.inner_ = null;
          this.opts = {
              image:      null
          }
          this.constructor = function(image) {
              this.inner_ = document.createElement('img');
              jQuery(this.inner_).addClass('thumb').click(jQuery.proxy(this.onPinClick, this));
              if (image) this.setImage(image);
          }
          this.setPosition = function(ll) {
              this.location_  = ll;
          }
          this.getPosition = function() {
              return this.location_;
          }
          this.onAdd = function() {
              var div = document.createElement('div');
              div.style.border = "none";
              div.style.borderWidth = "0px";
              div.style.position = "absolute";
              div.appendChild(this.inner_);
              this.div_ = div;
              var panes = this.getPanes();
              panes.overlayMouseTarget.appendChild(div);
          }
          this.onPinClick = function(e) {
              google.maps.event.trigger(this, 'open');
          }
          this.draw = function() {
              var overlayProjection = this.getProjection();
              if (overlayProjection) {
                  var pixPosition = overlayProjection.fromLatLngToDivPixel(this.location_);
                  this.div_.style.left = (pixPosition.x ) + "px";
                  this.div_.style.top = (pixPosition.y) + "px";
              }
          }
          this.setImage = function(image) {
              this.inner_.src = image;
          }
          this.constructor.apply(this, arguments);
      }
      CustomMarker.prototype = new google.maps.OverlayView();
      //=========== > Initialization 
      var posSkopje = new google.maps.LatLng(42.007652282715,21.372894287109034);
      var posColorado = new google.maps.LatLng(38.960487365723,-104.76946258545001);
      
      var map = new google.maps.Map(document.getElementById("map_canvas"), {
          center: new google.maps.LatLng(0, 0),
          zoom: 3,
          mapTypeId: google.maps.ROADMAP,
          maxZoom: 20
      });
      
      var markerSkopje = new CustomMarker('http://www.gnhl.ca/images/pushed-pin-hi.png');
      markerSkopje.setPosition(posSkopje);
      markerSkopje.setMap(map);
      
      var zoomOnClick = function(arg1) {
          map.setCenter(this.getPosition());
          map.setZoom(20);
      }
      
      google.maps.event.addListener(markerSkopje, 'open', jQuery.proxy(zoomOnClick, markerSkopje));
      

      【讨论】:

      • 是的,使用单个标记有效,但问题是如果放置多个标记它不起作用。我还注意到,如果我打开 chrome 上的硬件加速,这两个错误都已修复。所以这可能是 chrome 而不是谷歌地图的问题
      猜你喜欢
      • 2012-12-19
      • 2014-07-10
      • 1970-01-01
      • 2016-12-11
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多