我在设置自定义Google Maps API v3叠加层的可见性时遇到问题。我有一个带有各种叠加层的gmaps API页面,例如多边形,折线和符号。每个都有一个相关的文本标签,使用自我改编自[this Stack Overflow post] [1]
的答案改编而成在页面加载时,实际叠加(折线,多边形,标记等 - 内置API对象)可正常工作。它们基于默认复选框状态显示。但是,无论是否默认设置了复选框,都会显示标签。如果我循环复选框,一切正常。
叠加层存储为名为'叠加的对象'布局'描述:[折线,customoverlaylabel]'
复选框示例代码:
<input type="checkbox" id="sun" onclick="refreshCheck('sun')">Sun</input>
这是我同步显示屏是隐藏还是可见的方式:
function refreshCheck(overlay) {
var box = document.getElementById(overlay).checked
var lines = overlays[overlay][0]
var text = overlays[overlay][1]
lines.setVisible(box, overlay)
if (box === true) {
text.show()
}
else {
text.hide()
}
}
此代码刷新javascript头末尾的所有复选标记。
var overlayNames = []
for (var k in overlays) overlayNames.push(k)
for (var o in overlayNames) refreshCheck(overlayNames[o])
这是自定义文字叠加的隐藏方法:
TxtOverlay.prototype.hide = function(){
if (this.div_) {
this.div_.style.visibility = "hidden";
}
}
它没有通过if(this.div_)检查,也没有做任何事情。如果我删除了检查,则会产生错误,因为此div_不存在。
解决这个问题的一种方法是在页面加载后自动循环所有复选框状态(手动执行以解决它)。可能有一个更基本的修复。无论我在我的javascript中尝试使用.hide()或.show()标签,它都不起作用 - 只有在被点击的复选框引用时它才有效。
答案 0 :(得分:1)
问题是您拨打refreshChecks()
时的问题。
您认为此时已经添加了TxtOverlay,但情况并非如此(这就是为什么div_仍然为空)。
当地图投影准备就绪时,将添加地图上的TXToverlay(与任何对象/形状一样)。
可能的方法是:
而不是使用形状/标记/等的visible
- 属性。切换其可见性使用map
- 属性。
TXTOverlay也是MVCObject,你只需要将TXTOverlay的map
- 属性绑定到相关形状的map
- 属性。