Javascript 在Google Maps API V3中,当光标接近地图边缘时移动地图

Javascript 在Google Maps API V3中,当光标接近地图边缘时移动地图,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我使用矩形形状工具构建了一个选择工具。您可以通过在标记上绘制一个矩形来选择标记,然后释放“擦除”矩形(就像在桌面操作系统上选择对象一样) 这很好用,只是谷歌地图在你到达地图边缘时不会平移,所以如果它刚刚离开屏幕,你就不能继续你的选择。就像在网页上选择文本时,在向下滚动的折叠下方选择文本一样 我知道如何平移和居中地图,但我不知道如何使用这些来在到达地图边缘时获得平滑滚动的感觉。在屏幕上添加8个矩形,它们是透明的,也许拥有绝对的js支持将是一个好主意 当用户选择时: If users mouse

我使用
矩形
形状工具构建了一个选择工具。您可以通过在标记上绘制一个矩形来选择标记,然后释放“擦除”矩形(就像在桌面操作系统上选择对象一样)

这很好用,只是谷歌地图在你到达地图边缘时不会平移,所以如果它刚刚离开屏幕,你就不能继续你的选择。就像在网页上选择文本时,在向下滚动的折叠下方选择文本一样


我知道如何平移和居中地图,但我不知道如何使用这些来在到达地图边缘时获得平滑滚动的感觉。

在屏幕上添加8个矩形,它们是透明的,也许拥有绝对的js支持将是一个好主意

当用户选择时:

If users mouse is on area1 -> go north-west (code it)
If users mouse is on area2 -> go north (code it)
If users mouse is on area3 -> go north-east (code it)
If users mouse is on area4 -> go east (code it)
If users mouse is on area5 -> go south-east (code it)
If users mouse is on area6 -> go south (code it)
If users mouse is on area7 -> go south-west (code it)
If users mouse is on area8 -> go west (code it)
如果地图可以旋转-你必须调整滚动

如果你想要平滑的动画,你可以做。。。 例如,区域1:取y轴并将其与鼠标位置进行比较,然后调整加速度和最小/最大速度。 对于角点,可以使用普通的点到点距离数学


毕竟,你们可以声明径向加速度,但我认为,若应用程序也为其提供,它将使低规格智能手机崩溃。

我相信有一种更高效、更好、更干净的方法来处理这个问题,但我最终使用的是:

/**
 * This pans the map when the user is moused down and at the end of the map
 * bounding box.
 *
 * @return {undefined}
 */
DrawingManager.prototype._mapPanHandler = function (googleMapEvent) {
  var self = this;
  var event = googleMapEvent;

  var overlay = new google.maps.OverlayView();
  overlay.draw = function() {};
  overlay.setMap(map);

  var projection = overlay.getProjection();
  var pixelpoint = projection.fromLatLngToDivPixel(map.getCenter());

  var proj = overlay.getProjection();
  var thepix = proj.fromLatLngToDivPixel(event.latLng);

  var nE = map.getBounds().getNorthEast();
  var sW = map.getBounds().getSouthWest();
  var nE = proj.fromLatLngToDivPixel(nE);
  var sW = proj.fromLatLngToDivPixel(sW);

  var north = nE.y;
  var east  = nE.x;
  var south = sW.y;
  var west  = sW.x;

  var appx_north, appx_east, appx_south, appx_west;

  if (Math.round(thepix.y) <= Math.round(north + 50)) {appx_north = true;}
  if (Math.round(thepix.x) >= Math.round(east  - 50)) {appx_east  = true;}
  if (Math.round(thepix.y) >= Math.round(south - 50)) {appx_south = true;}
  if (Math.round(thepix.x) <= Math.round(west  + 50)) {appx_west  = true;}

  clearInterval(self._panTimer);

  if (!appx_north && !appx_east && !appx_south && !appx_west) {
    return;
  }

  var panMap = function () {
    var movementAmount = 3;
    if (appx_north) { pixelpoint.y -= movementAmount; }
    if (appx_east)  { pixelpoint.x += movementAmount; }
    if (appx_south) { pixelpoint.y += movementAmount; }
    if (appx_west)  { pixelpoint.x -= movementAmount; }
    point = projection.fromDivPixelToLatLng(pixelpoint);
    map.setCenter(point);
  }

  panMap();
  self._panTimer = setInterval(panMap, 10);
};
/**
*当用户被鼠标向下移动到地图的末尾时,它会平移地图
*边界框。
*
*@return{undefined}
*/
DrawingManager.prototype.\u mapPanHandler=函数(googleMapEvent){
var self=这个;
var事件=谷歌地图事件;
var overlay=new google.maps.OverlayView();
overlay.draw=函数(){};
覆盖.setMap(map);
var projection=overlay.getProjection();
var pixelpoint=projection.fromLatLngToDivPixel(map.getCenter());
var proj=overlay.getProjection();
var thepix=LatlngToDivPixel项目(事件latLng);
var nE=map.getBounds().getNorthEast();
var sW=map.getBounds().getSouthWest();
var nE=LatlngToDivPixel项目(nE);
var sW=LatlngToDivPixel项目(sW);
var north=nE.y;
var east=nE.x;
var south=西南y;
var west=西南x;
var appx_北、appx_东、appx_南、appx_西;
如果(Math.round(thepix.y)=Math.round(east-50)){appx_east=true;}
如果(Math.round(thepix.y)>=Math.round(south-50)){appx_south=true;}

如果(Math.round(thepix.x))但如何平滑移动地图以匹配用户的移动?如果我将地图“居中”(例如)
area1
它会很不平稳地跳到那个位置。如果我给它设置动画,它会以完全不同的速度设置动画,然后用户的鼠标会看到你的编辑,是的,这就是我以前做过的,在智能手机上效果很好,但你不能像普通网页那样滚动。你不能像那样比较y轴。你需要使用“中心”或“平移”(阿法克)而那些你需要使用的是LatLng,而不是像素值。如果你平移到area1 LatLng,它会跳转并将地图居中到area1的中心,这不是任何人都会想到的。旧代码只是普通的div,比如:但这对google maps不起作用。我不确定如何在google maps中以这种方式滚动,当我到达hom时,Si会有所帮助E