【发布时间】:2016-08-19 08:07:07
【问题描述】:
我正在处理一个带有覆盖(覆盖数组?)的 OpenSeaDragon 图像,该图像具有大约 500 个可点击的 svg 矩形元素,使用 Overlay.onclick() 函数实现
可点击区域的边界矩形各不相同,但总是比可见矩形大得多,并且通常也会覆盖相邻的矩形。我试过弄乱边距、边框和填充无济于事。此图像显示了一个示例,显示了差异。实际显示的矩形与可见文本框的尺寸相同,而可点击区域是整个突出显示的矩形。
似乎没有太多可预测性 - 可点击区域以一种明显随机的方式变化,但总是大于正确的大小,在两个方向上最多大约两倍。如图所示,它并不总是居中 - 我不确定它是否总是居中。放大和缩小图像时,比例保持不变。
我是 JS 的新手,这涉及到很多组件,包括 D3 和 OSD 套件,我不知道从哪里开始。任何建议将不胜感激!
作为参考,这里是从数组生成框的代码。这是改编自一个矩形示例,我不知道这是否是一个好方法。 (我希望盒子的内部完全透明,除非将鼠标悬停在它上面,但这是另一个问题......)
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');
});
}
【问题讨论】:
-
你有没有在你可以链接的地方运行它?这将有助于调试它。
-
是的,请参阅hebegb.homeunix.net/t2/view-isp-tool.html - 不幸的是,我不能将它永久留在这个位置,但它会持续一个月左右。一旦我们解决了问题,它最终将在thespaceplan.com 上提供。这当然是修改过的 html、修改过的 css 和修改过的 js。我已经远离这方面的事情很长时间了,我从各种各样的例子开始。 :P
-
它实际上对我来说看起来很不错……有些黄色矩形有点偏离,但这可能只是数据问题。这是否意味着你已经解决了?
-
很遗憾没有。正如您所指出的,可见的矩形(大部分)是正确的。但是,如果您单击任何矩形,它可能会或可能不会起作用。例如,如果您单击 Robotic Exploration 下的第一个元素“Near Earth Asteroid Rendezvous”,它将在另一个窗口/选项卡中正确打开一个页面,其中显示有关该主题的数据。但是如果你点击下一个框,“月球勘探者”,你会放大——你不会得到相关的页面。如果您在“近地小行星会合点”上“检查元素”,则蓝色可点击区域会覆盖这些框和其他框的一部分。
-
我明白了!是的,这绝对看起来像是一个四舍五入的问题。如果我更改 SVG 对象的坐标,圆角矩形会移动,但元素的单击框不会移动。您应该按照我在下面的建议进行操作,并将所有内容乘以 1000 左右;这应该会照顾好它。
标签: d3.js svg openseadragon