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%,以获得与位置的完美对齐。谢谢你的帮助。干杯