当前位置: 首页 > 面试题库 >

如何使用d3将圆环带到前面?

柳刚豪
2023-03-14
问题内容

首先,我正在使用d3.js在数组中显示不同大小的圆圈。在鼠标悬停时,我希望将鼠标悬停的圆圈变大,我可以这样做,但是我不知道如何将其置于最前面。目前,一旦渲染,它就隐藏在其他多个圈子的后面。我怎样才能解决这个问题?

这是一个代码示例:

   .on("mouseover", function() { 
    d3.select(this).attr("r", function(d) { return 100; })
  })

我尝试使用排序和排序html" target="_blank">方法,但是它们没有用。我敢肯定我没有正确地做。有什么想法吗?


问题答案:

您将不得不更改对象的顺序,并使鼠标悬停的圆圈成为最后添加的元素。正如您在此处看到的那样:并根据nautat的建议,必须在主脚本之前定义以下内容:

d3.selection.prototype.moveToFront = function() {
  return this.each(function(){
    this.parentNode.appendChild(this);
  });
};

然后,您只需在鼠标悬停时moveToFront在您的对象上调用函数(例如circles):

circles.on("mouseover",function(){
  var sel = d3.select(this);
  sel.moveToFront();
});

编辑: 根据Henrik Nordberg的建议,有必要使用的第二个参数将数据绑定到DOM
.data()。为了不丢失对元素的绑定,这是必需的。请阅读Henrick的答案(并支持!)以获取更多信息。作为一般建议,始终使用将.data()数据绑定到DOM时的第二个参数,以利用d3的全部性能。

编辑: 如Clemens Tolboom所述,反向功能为:

d3.selection.prototype.moveToBack = function() {
    return this.each(function() {
        var firstChild = this.parentNode.firstChild;
        if (firstChild) {
            this.parentNode.insertBefore(this, firstChild);
        }
    });
};


 类似资料:
  • 问题内容: 我目前正在等待一个非常重要的公告,并且我已经创建了一个简单的应用程序,每隔30分钟检查一次公告是否发布 发布公告后,我希望弹出一个窗口并通知我。该窗口只是一个简单的JFrame,其中包含一些文本。 我有一堂课,叫做公告。 在此类内,我为框架定义了另一个称为Form的类,因此我有类似以下内容: toFront函数根本不起作用。 例如,我要执行的操作是:在浏览时,我要弹出该窗口并将焦点设置

  • 我有一个带有负页边空白的ViewPager/FragmentPagerAdapter组合,这样页面之间会稍微有些重叠。问题是,中间的页面不在最上面。它左边的一页遮住了它。我希望它使中心页面总是显示在顶部。有没有一种优雅的方式来做到这一点?

  • 问题内容: 我在这里想到了这个循环: 它有效,但是我敢肯定有更好的方法 问题答案: 答案将取决于您使用的是哪种类型,例如,如果您使用的是a ,则可以使用类似… 假设您只想向表模型的末尾添加行;) 就个人而言,我希望将每个成员作为单个实体添加到表模型中,但这仅仅是我一个 看看如何使用表格了解更多详细信息…

  • 问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost

  • 我正在尝试使用Python's gui模块中的一个来检索用户的Twitter用户名和密码: 下面是我的第一次尝试(使用easygui): 下面是我的第二次尝试(使用tkinter): 目前,两个gui都自动出现。相反,一个Python图标出现在我的Windows任务栏上,我必须单击该图标才能显示gui。有什么编程方式可以让gui自动弹出吗?或者我可以使用另一个模块来实现这一点?