【问题标题】:Styling d3´s tooltip样式化 d3 的工具提示
【发布时间】:2016-02-26 13:17:06
【问题描述】:

我在这样的传单地图上通过 d3 放置的圆圈上实现了一个工具提示:

var tooltip = d3.select("body")
    .append("div")
    .attr("id", "mytooltip")
    .style("position", "absolute")
    .style("z-index", "10")
    .style("visibility", "hidden")
    .text("a simple tooltip");



feature.on("mouseover",function(d) { 
    d3.select(this)
    .transition()
    .ease("elastic")
    .duration(500)
    .attr('r', function (d){ 
        return (d.properties.xy * 5)
        .style("stroke", "black")
        d3.select("#mytooltip")
            .style("visibility", "visible")
            .text(d.properties.xy1 + " " + d.properties.xy2)
    });

feature.on("mousemove", function() {
    return tooltip.style("top", (d3.event.pageY-10)+"px")
    .style("left",(d3.event.pageX+10)+"px");

    });

feature.on("mouseout",function(d) { 
    d3.select(this)
    .transition()
    .ease("elastic")
    .duration(500)
    .attr('r', function (d){ 
            return (d.properties.xy);
        })
        .style("stroke", "none")
        d3.select("#mytooltip")
            .style("visibility", "hidden")
    });

我的特点是:

var feature = g.selectAll("circle")
      .data(myData.features)
      .enter()
      //...

我想知道如何设置显示的工具提示的样式?有没有办法给它一个背景,用粗体、斜体、不同颜色等写一些东西?

【问题讨论】:

    标签: javascript d3.js mouseevent


    【解决方案1】:

    这是我喜欢做的事情。首先,我设置工具提示的 CSS 样式,使用一个名为“工具提示”的类的 div:

    div.tooltip {   
        position: absolute;         
        etc...          
    }
    

    然后我设置了一个工具提示变量(这里,svgId 是您附加 SVG 的元素的 ID,与您选择“body”没有太大区别):

    var tooltip = d3.select("#svgId").append("div") 
        .attr("class", "tooltip")               
        .style("opacity", 0);
    

    div 具有0 不透明度。然后只需在mouseovermousemove 上显示工具提示即可:

    selection.on("mousemove", function(d) {
        tooltip.html("<strong> Look, I'm bold !</strong> and now I'm not bold<br>
            and this is another line!and this is my data: " + d.whatever)
            .style('top', d3.event.pageY - 12 + 'px')
            .style('left', d3.event.pageX + 25 + 'px')
            .style("opacity", 1);
    });
    

    您可以使用 HTML 标记为工具提示内的文本设置样式,使其变为粗体、斜体等。最后,我们使工具提示在鼠标移出时消失(就像您所做的那样):

    selection.on("mouseout", function(d) {
        tooltip.style("opacity", 0);
    });
    

    由于具有0 不透明度的 div 仍然在页面中占据空间,因此更好的方法是在 mouseover 期间将其 display 属性从 none 更改为 block,然后在mouse out.

    【讨论】:

      【解决方案2】:

      您可以使用 CSS 设置工具提示的样式。您可以在单独的.css 文件、&lt;style&gt; 标记中执行此操作,或者使用 d3 以与提供工具提示可见性相同的方式执行此操作。类似.style("background", "rgba(179, 107, 0, 0.5)")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多