3

我有一个 SVG 文件显示在UIWebView. 此 SVG 包含许多<a>指示可触摸元素的标签。加载 SVG 文件后,我想滚动视图,使特定元素位于屏幕中心附近。

我到目前为止是这样的:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [diagramView stringByEvaluatingJavaScriptFromString:@""
        "var e = document.getElementById('myelement');"
        "var top = e.offsetTop;"
        "while (e.offsetParent) {"
        "    e = e.offsetParent;"
        "    top += e.offsetTop;"
        "}"
        "alert(top);"
        //"scrollTo(0, top);"
    ];
}

但是,top无论何时运行,最终都会为 0。该元素e指向<a>SVG 文件的正确元素(使用 进行检查alert(e.id))。我似乎找不到给我实际偏移量的元素属性的正确组合。

我可以硬编码一组合适的偏移量,但我真的不想这样做。

4

1 回答 1

0

请参阅getBBox,记录在http://www.w3.org/TR/SVG11/types.html#__svg__SVGLocatable__getBBox(抱歉不能作为链接发布,所以错误)

一个快速演示是使用 Chrome加载https://upload.wikimedia.org/wikipedia/commons/0/07/Wikipedia_logo_(svg).svg并运行$('#path3695').getBBox().y

特别是对于您,只需使用:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [diagramView stringByEvaluatingJavaScriptFromString:@""
        "var e = document.getElementById('myelement');"
        "var top = e.getBBox().y;"
        "alert(top);"
        "scrollTo(0, top);"
    ];
}
于 2014-02-21T15:57:41.500 回答