以下是关于IT技术的一些新闻(我希望将它们放在这里作为一个回答,而不是编辑我的问题或创建一个新问题。如果有需要,请随时告诉我,以便我进行更正):
我的问题如下:
var oldmap = new GGroundOverlay("test.svg", boundaries)
map.addOverlay(oldmap)
在Safari 3、Firefox和Opera上无法正常工作(IE不能绘制SVG)。
事实上,此代码会在<div>
中插入以下元素:
<img src="test.svg" style=".....">
Safari 4可以将SVG文件作为图像绘制,但其他浏览器不支持此方法。因此,现在的想法是创建一个自定义的SVG覆盖层,如此处所述。
这就是我为什么需要这个问题的原因(很抱歉,HTML / JavaScript 不是我的强项)。
由于WebKit渲染带有透明背景的SVG时存在小bug,因此我需要根据浏览器使用<object>
或<img>
(我不喜欢这样做,但是目前还是快速脏乱的试验阶段)。
因此,我从这段代码开始(仍在进行中):
function myOverlay(SVGurl, bounds)
{
this.url_ = SVGurl;
this.bounds_ = bounds;
}
myOverlay.prototype = new GOverlay();
myOverlay.prototype.initialize = function(map)
{
var div = document.createElement("div");
div.style.position = "absolute";
div.setAttribute('id',"SVGdiv");
div.setAttribute('width',"900px");
div.setAttribute('height',"900px");
this.map_ = map;
this.div_ = div;
var svgRoot;
if (BrowserDetect.browser=='Safari')
{
svgRoot = document.createElement("img");
svgRoot.setAttribute("id", "SVGelement");
svgRoot.setAttribute("type", "image/svg+xml");
svgRoot.setAttribute("style","width:900px;height:900px");
svgRoot.setAttribute("src", "test.svg");
}
else
{
svgRoot = document.createElement("object");
svgRoot.setAttribute("id", "SVGelement");
svgRoot.setAttribute("type", "image/svg+xml");
svgRoot.setAttribute("style","width:900px;height:900px;");
svgRoot.setAttribute("data", "test.svg");
}
div.appendChild(svgRoot);
map.getPane(G_MAP_MAP_PANE).appendChild(div);
}
...
draw
函数尚未编写。
我仍然有一个问题(由于我到处阅读/学习以及回答我的问题的人,所以进展缓慢)。
现在,问题是:使用<object>
标签时,地图不可拖动。在整个<object>
元素上,鼠标指针不是“手形图标”,无法拖动地图,而只是普通的指针。
我没有找到如何纠正这个问题。我应该添加一个新的鼠标事件(我只看到当单击或双击发生时才会出现鼠标事件,但没有用于拖动地图的鼠标事件...)吗?
还是有另一种方法可以添加此图层以保留可拖动性?
感谢您的评论和答案。
附言:我还尝试逐个添加我的SVG元素,但是...实际上...我不知道如何将它们添加到DOM树中。在这个例子中,SVG使用GXml.parse()
进行读取和解析,并获取所有具有给定标记名称的元素(xml.documentElement.getElementsByTagName
),并将其添加到SVG节点(svgNode.appendChild(node)
)。但在我的情况下,我需要直接添加SVG/XML树(添加其所有元素),并且有不同的标记(<defs>
,<g>
,<circle>
,<path>
等)。这可能更简单,但我不知道如何做.. :(