我是一个新生的wordpress家伙,他试图在使用wordpress构建的my new site上显示我的d3.js portofolio小集合。这样做时,我遇到了一个小问题:我在特定的博客页面中显示我的作品,可通过单击“可视博客”顶部导航菜单进行访问。

在这些文章中,有一个标题为“国家的国内生产增长:泡沫力量图”,其中嵌入了d3.js可视化。如果您将鼠标悬停在气泡上,则可能会出现一个显示各种信息的工具提示,直到昨天为止,该提示都可以正常工作。鼠标悬停事件不再显示。

如果您访问the article directly,该工具提示仍然可以正常工作,但是如上所述,在博客页面from top navigation menu中访问该工具提示时,该提示不起作用。

这是相关的代码片段:

bubbles
.on("mouseover", function(d){
     tooltip_div.style("display", "inline");
     /*.....*/
 })
.on("mousemove", function(d){
      var r = this.getBBox().width/2, myX = this.getBBox().x, myY = this.getBBox().y;

      tooltip_div
         .style("left", function(){
            return ((d3.event.pageX - 250)+ r) + "px";
          })
         .style("top", function(){
             return (d3.event.pageY - 470) + "px";
          });
 })
.on("mouseout", function(d){
       tooltip_div.style("display", "none");
     /*.....*/
 });


这很令人困惑,因为我在其他文章(例如各种“ Barchart”文章)上使用了相同的技术来显示和确定工具提示的位置,因此,除了单独的气泡图,它们都工作正常。

注1:我在Opera上进行了测试。

注2:我试图从博客页面删除“英国君主族谱:强制定向图”文章,工具提示恢复正常。我又发布了一次,工具提示不再出现...

最佳答案

依靠绝对的工具提示定位似乎是不可能的,因为wordpress博客总是随着新文章而增长,弄乱了d3.event.pageX和d3.event.pageY变量。更不用说作为wordpress的新手了,我仍然对wordpress系统如何工作缺乏了解。

我没有相对于整个动态页面本身定位工具提示(通过d3.event.pageX和d3.event.pageY),而是将工具提示直接附加到每只鼠标上方的SVG上,使用d3.mouse调整位置(this),而不是之前的d3.event,并在鼠标移出事件上删除工具提示SVG元素。

var countryText;

bubbles
  .on("mouseover", function(d){
     countryText = bubbleGroup.append("text")
        .attr("class", "countryText")
        .attr("font-size", 13)
        .attr("font-weight", "bold")
        .text(d.country)
        .style("pointer-events", "none")
        .attr("x", d3.mouse(this)[0] - 60)
        .attr("y", (d3.mouse(this)[1] - 20));
   })
  .on("mousemove", function(d){
     countryText
       .attr("x", d3.mouse(this)[0] - 60)
       .attr("y", (d3.mouse(this)[1] - 20));
   })
  .on("mouseout", function(d){
     d3.select(".countryText").remove();
   })


如您所见,如果您看到the blog page中的文章,或者访问了文章directly,这将使工具提示的定位更加稳定。

关于javascript - d3.js div工具提示不再出现在wordpress中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46010539/

10-14 19:49