繁体   English   中英

工具提示未在D3.js代码中的确切位置显示

[英]Tooltip is not displaying in the exact position in D3.js code

工具提示未在适当的区域显示。我正在使用D3.js

var divLink = d3.select(el[0]).append("div")   
.attr("class", "tooltip")               
.style("opacity", 0);

.attr("id",function(d){
    return d.linkID;})
    .style("stroke-width", 0.7)
    .style("fill", "none")
    .on("mouseover", function(d) {
        var dx = (d.x+30), dy = (d.y+155)-$('#svgWrapper').scrollTop();
        divLink.transition()        
        .duration(200)      
        .style("opacity", .9); 
        // When links are hovered, tool tip is created
        if(d.source.type.toLowerCase()=="rack" || d.target.type.toLowerCase()=="rack")
        {
            divLink.html("<b>Link Details: </b><br/><br/>"+"<b>Link Id: </b>"+d.linkID +"<br/>"
                    +"<b>Device1: </b>"+d.source.name+"<br/>"+ "<b>Device2: </b>"+d.target.name+"<br/>") 
                    .style("left", (d3.event.pageX) + "px")
                    .style("top", (d3.event.pageY - 28) + "px");
        }else{
            divLink.html("<b>Link Details: </b><br/><br/>"+"<b>Link Id: </b>"+d.linkID +"<br/>"+"<b>Link Speed: </b>"+d.linkSpeed+"<br/>"
                    +"<b>Device1: </b>"+d.source.name+"<br/>"+ "<b>Ports at Device1: </b>"+d.sport+"<br/>"+"<b>Device2: </b>"+d.target.name+"<br/>"
                    + "<b>Ports at Device2: </b>"+d.tport+"<br/>") 
                    .style("left", (d3.event.pageX) + "px")
                    .style("top", (d3.event.pageY - 28) + "px");
        }
    })                  
    .on("mouseout", function(d) { 
        divLink.transition()        
        .duration(500)      
        .style("opacity", 0);  

    });

风格上有些东西,因此我收到了这个错误。 实际上,我在另一个工具提示中有一个工具提示,该工具提示放置在确切的区域中。

var div = d3.select(el[0]).append("div")   
.attr("class", "tooltip")               
.style("opacity", 0);



// Device Node Creation
var node = svg.selectAll(".node")
.data(networkObject.nodes)
.enter()
.append("g")
.attr("id",function(d){return d.name;})
.attr("class","node")
.attr("transform", function(d) {
    return "translate(" + d.x + "," + (d.y) + ")"; })
    .on("mouseover", function(d) { 
        var dx = (d.x+30), dy = (d.y+155)-$('#svgWrapper').scrollTop();
        div.transition()        
        .duration(200)      
        .style("opacity", .9);   
        // Tool tip when hovered on particular device node
        if(d.type.toLowerCase()=="rack"){
            div.html("<b>Rack Details: </b><br/><br/>"+"<b>Rack Id: </b>"+d.name +"<br/>"+"<b>TOR Switches: </b>"+d.tor+"<br/>"+"<b>Management Switches: </b>"+d.mgmt+"<br/>"+"<b>Hosts: </b>"+d.host+"<br/>"+"<b>Status: </b>"+d.errorst+"<br/>")  
            .style("left",dx + "px")     
            .style("top", dy + "px");    
        }else if(d.type.toLowerCase()=="switch" && d.role.toLowerCase()=="spine"){
            div.html("<b>Switch Details: </b><br/><br/>"+"<b>Switch Id: </b>"+d.name +"<br/>"+ "<b>Role: </b>"+d.role+"<br/>"+"<b>IP Address: </b>"+d.ip+"<br/>"+"<b>Status: </b>"+d.errorst+"<br/>")  
            .style("left", dx + "px")     
            .style("top", dy + "px");    
        }else if(d.type.toLowerCase()=="switch"){
            div.html("<b>Switch Details: </b><br/><br/>"+"<b>Switch Id: </b>"+d.name +"<br/>"+ "<b>Role: </b>"+d.role+"<br/>"+"<b>Rack: </b>"+d.rack+"<br/>"+"<b>IP Address: </b>"+d.ip+"<br/>"+"<b>Status: </b>"+d.errorst+"<br/>")  
            .style("left", dx + "px")     
            .style("top", dy + "px");    
        }else if(d.type.toLowerCase()=="host"){
            div.html("<b>Host Details: </b><br/><br/>"+"<b>Host Id: </b>"+d.name +"<br/>"+"<b>Rack: </b>"+d.rack+"<br/>"+"<b>IP Address: </b>"+d.ip+"<br/>"+"<b>Status: </b>"+d.errorst+"<br/>")  
            .style("left", dx + "px")     
            .style("top", dy + "px");
        }else if(d.type.toLowerCase()=="corporate"){
            div.html("<b>Corporate Network</b><br/><br/>")  
            .style("left", dx + "px")     
            .style("top", dy + "px");
        }
    })                  
    .on("mouseout", function(d) { 
        div.transition()        
        .duration(100)      
        .style("opacity", 0);   
    });

所以实际上我找到了答案,我添加了x和y的坐标。 那么工具提示就可以了,我认为这应该是一个永久的解决方案。如果有人有其他答案,请发表。

                    .style("left", (d3.event.pageX-460) + "px")
                    .style("top", (d3.event.pageY - 50) + "px");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM