Google maps api 3 parentNode为null或未在带有图像的可拖动可调整大小的自定义覆盖中定义。GMAPSv3

Google maps api 3 parentNode为null或未在带有图像的可拖动可调整大小的自定义覆盖中定义。GMAPSv3,google-maps-api-3,Google Maps Api 3,我制作了一个带有图像的可调整大小的自定义覆盖图,它可以正常工作,您可以在这里看到, . 在右上角和左下角有一些红色的角图标,您可以拖动这些图标并调整图像和覆盖的大小。问题是,当你将图像缩小时,它会留下较大比例图像的残余 然后,我添加了一个函数,在绘制新的覆盖图之前删除覆盖图,直接从示例overlay.onRemove()中删除;它起作用了,但只要您取消单击该标记,就会出现错误“parentnode:object为null或undefined”,您可以在这里看到它 如果查看源代码,则将侦听器拖动

我制作了一个带有图像的可调整大小的自定义覆盖图,它可以正常工作,您可以在这里看到,
. 在右上角和左下角有一些红色的角图标,您可以拖动这些图标并调整图像和覆盖的大小。问题是,当你将图像缩小时,它会留下较大比例图像的残余

然后,我添加了一个函数,在绘制新的覆盖图之前删除覆盖图,直接从示例overlay.onRemove()中删除;它起作用了,但只要您取消单击该标记,就会出现错误“parentnode:object为null或undefined”,您可以在这里看到它

如果查看源代码,则将侦听器拖动到第173行,并调用overlay=new USGSOverlay(bounds,srcImage,map,'yes');在线194

函数位于第71行。并查找ifDrag,然后删除以前的覆盖,我不明白为什么它会工作,但一旦你取消单击标记,它就会抛出错误并中断脚本


如果有人能为我提供修复或解决错误的方法,那就太棒了。这是一个非常好的功能,我太接近放弃。谢谢。

我相信您的问题在于
绘图功能:

var div;
USGSOverlay.prototype.draw = function() {
  // Size and position the overlay. We use a southwest and northeast
  // position of the overlay to peg it to the correct position and size.
  // We need to retrieve the projection from this overlay to do this.
  var overlayProjection = this.getProjection();
  // Retrieve the southwest and northeast coordinates of this overlay
  // in latlngs and convert them to pixels coordinates.
  // We'll use these coordinates to resize the DIV.
  var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
  var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());
  // Size the image's DIV to fit the indicated dimensions.
  div = this.div_;
  div.style.left = sw.x + 'px';
  div.style.top = ne.y + 'px';
  div.style.width = (ne.x - sw.x) + 'px';
  div.style.height = (sw.y - ne.y) + 'px';
}
是否要删除
var div
的外部声明,并在
draw
函数引用
this.div
中进行引用?我相信这是你的问题

draw
的最后几行不应该这样实现吗:

//Remove this line:
//div = this.div_;
this.div_.style.left = sw.x + 'px';
this.div_.style.top = ne.y + 'px';
this.div_.style.width = (ne.x - sw.x) + 'px';
this.div_.style.height = (sw.y - ne.y) + 'px';

add
功能中也有类似的代码。我建议您在
add
中使用类似的代码-直接使用
this.div
;看起来您可能会混淆引用。

我们得出的结论是,触发并终止了太多事件。脚本“dragend”是解决方案(不完美,但可行),适用于所有浏览器,并将不透明度设置为50%,以获得与位置的完美对齐。谢谢你的帮助。干杯。

你的
debug2
在Firefox中非常适合我。我没有得到一个错误,形状的大小调整得很好。如果我拖动得很小,右上角的红色角条会从形状上移开,图像会从两个红色角条外弹出,但这两个问题让人觉得您需要改进代码。当您收到异常时,您使用的浏览器是什么?是的,它看起来可以工作,但您会注意到红色角标记没有落在图像上,这就是错误发生的地方。我正在使用ie9,将其设置为显示脚本错误,而F12用于控制台。在我的真实地图中,有一个dragEnd侦听器,它可以重新定位标记,并在错误处中断。如果这个错误消失了,我很乐意去做。当我使用Chrome时,我确实看到了这个错误:
TypeError:cannotreadproperty'parentNode'of null[http://wifigator.com/dash/debug.php:144]
。你能发布你的代码吗?别担心,代码就在页面上。它看起来像是
onRemove
函数中的
USGSOverlay.div
成员是
null
。我会为你看得更深一点-非常感谢,这就是它所在的位置,图像有一个绝对路径,因此你可以在浏览器中运行它。我打开了firebug,如果我短时间拖动,第一个错误是“this.div is null”,一旦我释放单击,它就会弹出第二个错误,与第一个错误相同。(因为只有一个覆盖,所以它也可以是overlay.div_)。我不明白这个.div_uu怎么可能是空的,它仍然清除了以前的覆盖。谢谢Sean Micky,我想我有了一些进展,结果是拖动触发了额外的事件,有人说尝试改变位置而不是拖动,它在ie和chrome中工作(除非你拖动到窗口之外)。但它在fireFox中根本不起作用。我已经为此工作了两天,我看到了一些曙光。我把它上传到这里,很明显fireFox不喜欢这个位置的改变。啊,我做了你建议的改变,还是不行。我遇到了这个建议,建议“位置改变”,因为在很多事件中,这确实解决了ie和chrome中的问题,但在opera和firefox中完全崩溃了。拖动在所有浏览器中重新调整大小,但在鼠标释放时都会崩溃,我从触发的其他结束事件中怀疑。我们得出的结论是触发了太多事件并杀死了脚本,dragend是解决方案(不是完美的,但可以工作),在所有浏览器中都可以工作,并将不透明度设置为50%,以获得与位置的完美对齐。谢谢你的帮助。干杯