1

我正在处理一个带有覆盖(覆盖数组?)的 OpenSeaDragon 图像,该图像具有大约 500 个可点击的 svg 矩形元素,使用 Overlay.onclick() 函数实现

可点击区域的边界矩形各不相同,但总是比可见矩形大得多,并且通常也覆盖相邻的矩形。我试过弄乱边距、边框和填充无济于事。此图像显示了一个示例,显示了差异。实际显示的矩形与可见文本框的尺寸相同,而可点击区域是整个突出显示的矩形。

似乎没有太多可预测性 - 可点击区域以明显随机的方式变化,但总是大于正确的大小,在两个方向上最多大约两倍。如图所示,它并不总是居中 - 我不确定它是否总是居中。放大和缩小图像时,比例保持不变。

我是 JS 的新手,这涉及到很多组件,包括 D3 和 OSD 套件,我不知道从哪里开始。任何建议,将不胜感激!

从 openseadragon 截取的截图

作为参考,这里是从数组生成框的代码。这是改编自一个矩形示例,我不知道这是否是一个好方法。(我希望盒子的内部完全透明,除非将鼠标悬停在它上面,但这是另一个问题......)

var overlay = this.viewer.svgOverlay();
len = nodes.length;
var d3Rect = [];
var url    = [];
for (var i = 0; i < len; i++) {

    var mynode = nodes[i];
    d3Rect[i] = d3.select(overlay.node()).append("rect")
        .style('fill', '#ffffff')
        .style('fill-opacity', '0.05')
        .style('stroke', '#000066')
        .style('stroke-width', '0.0005')
        .style('stroke-opacity', '0.5')
        .attr("x",      mynode.x1)
        .attr("width",  mynode.width)
        .attr("y",      mynode.y1)
        .attr("height", mynode.height)
        .attr("title",  mynode.title)
        .attr("href",  mynode.link);

    overlay.onClick(d3Rect[i].node(), function() {
        window.open(this.element.getAttribute("href"), '_blank');
    });
}
4

2 回答 2

0

一种可能性是您遇到了精度问题。视口坐标中图像的尺寸是多少?默认情况下,宽度为 1,但这可能会在放大这些 SVG 元素时导致舍入问题。尝试将图像设置为 1000 宽,并将所有叠加坐标乘以 1000,看看是否有帮助。

于 2016-04-26T20:13:27.813 回答
0

我不是 100% 确定,但看起来你正在创建 1 个未知大小的覆盖元素,然后在其中添加所有矩形,然后将点击事件绑定到顶部覆盖而不是单个矩形。

无论如何,如果您需要的形状是简单的矩形,您应该尝试使用 viewer.addOverlay( element, location, placement, onDraw ) 链接到文档

于 2016-04-26T05:59:19.290 回答