4

一般来说,我对 D3、svg 和 javascript 比较陌生,所以请多多包涵:]

我一直在尝试使用 D3 创建绘图和图形。我使用 D3 创建了一个小图,并一直试图使其与 IE8 兼容。这是我的图表或多或少工作构建的链接。

http://jsfiddle.net/kingernest/YDQR4/1/

经过一番研究,我很快意识到,在 IE8 上运行 D3 的唯一方法就是将其他 API 与 D3 结合使用。幸运的是,我发现有人已经在一个名为“r2d3”的项目中投入了一些工作,据我了解,该项目使用 raphael 在 IE8 窗口上绘制画布,而不是使用 SVG(IE8 显然不支持)。

我已经能够在屏幕上绘制项目,这是成功的一半。但是,我遇到了很多问题,尤其是我的工具提示。我的工具提示被编写为一个 DIV 容器,它在数据圈悬停时浮动并更改位置/不透明度。这似乎在其他浏览器中工作正常,但使用 r2d3,我无法让它工作。我怀疑这是因为我在(在#main div 中)之外创建了 div 工具提示。但是,我尝试将工具提示放置在 SVG 容器内,但无济于事。然后我做了更多的研究,发现我必须在标签内包装一个 div 容器,但经过一些实验后,我仍然无法让工具提示在 IE 中正常工作。我试图将 SVG 组 () 包装起来,并改变了这个对象的位置,

在这一点上,我有点卡住了,想知道是否有人对我如何能够成功实现工具提示有任何建议。我还注意到,在我的函数中使用 d3.select(this) 尝试选择特定数据点(在本例中为圆形)时,在尝试访问或修改该项目的属性时似乎会出现许多问题,但我认为这完全是另一个问题。

任何帮助是极大的赞赏!

我当前如何创建工具提示的示例:

 //Create tooltip element
 var tooltip = d3.select("#main")
     .append("div")
         .attr("class", "tooltip")
     .style("position", "absolute")
     .style("z-index", "10")
     .style("opacity", 0);

function mousemove()
{    //Move tooltip to mouse location
    return tooltip.style("top", (event.pageY-10)+"px").style("left",(event.pageX+10)+"px");                            
}

//Mouseover function for circles, displays shortened tooltip and causes other circles to become opaque
function mouseover()
{
    var myCircle = d3.select(this);

    d3.select(this).attr("class", "dataCircleSelected");    //Color circle green

    tooltip.html(    //Populate tooltip text
        "Username: " + d3.select(this).attr("username") + "<br/>" +
        "Session ID: " + d3.select(this).attr("sessionid") + "<br/>" + 
        "Impact CPU: " + d3.select(this).attr("impact")            
    )
    .transition()
    .duration(250)
    .style("opacity", .7);

    //After 1000ms, make other circle opaque
    svg.selectAll("circle")
    .filter(function(d, i){    //return every other circle
        return !d.compare(myCircle[0][0].__data__);
    })
    .transition().delay(1000)
    .style("opacity", .2);

}
4

1 回答 1

0

您是否尝试过在(写而不是)中显式使用foreignObjects 使用 xhtml 命名空间作为 html 标记,如下所述:SVG 中的 HTML 元素未显示foreignObjectxhtml:divdiv

这将为工具提示定义提供类似的东西

var tooltip = d3.select("#main").append("foreignObject")
     .append("xhtml:div")
         .attr("类", "工具提示")
     .style("位置", "绝对")
     .style("z-index", "10")
     .style("不透明度", 0);
于 2013-03-05T01:22:47.743 回答