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

使用D3更新SVG元素Z-索引

雷曜灿
2023-03-14
问题内容

使用D3库将SVG元素置于z顺序顶部的有效方法是什么?

我的特定情况是一个饼图其中突出(通过添加strokepath)当鼠标在给定的片。生成我的图表的代码块如下:

svg.selectAll("path")
    .data(d)
  .enter().append("path")
    .attr("d", arc)
    .attr("class", "arc")
    .attr("fill", function(d) { return color(d.name); })
    .attr("stroke", "#fff")
    .attr("stroke-width", 0)
    .on("mouseover", function(d) {
        d3.select(this)
            .attr("stroke-width", 2)
            .classed("top", true);
            //.style("z-index", 1);
    })
    .on("mouseout", function(d) {
        d3.select(this)
            .attr("stroke-width", 0)
            .classed("top", false);
            //.style("z-index", -1);
    });

我已经尝试了几种选择,但到目前为止还没有运气。同时使用style("z-index")和调用classed均无效。

在我的CSS中,“ top”类的定义如下:

.top {
    fill: red;
    z-index: 100;
}

fill语句可以确保我知道它正确打开/关闭。它是。

我听说过使用sort是一个选项,但是我不清楚如何将“ selected”元素置于顶部。

更新:

我使用以下代码修复了我的特殊情况,该代码在mouseover事件中为SVG添加了新弧形以显示亮点。

svg.selectAll("path")
    .data(d)
  .enter().append("path")
    .attr("d", arc)
    .attr("class", "arc")
    .style("fill", function(d) { return color(d.name); })
    .style("stroke", "#fff")
    .style("stroke-width", 0)
    .on("mouseover", function(d) {
        svg.append("path")
          .attr("d", d3.select(this).attr("d"))
          .attr("id", "arcSelection")
          .style("fill", "none")
          .style("stroke", "#fff")
          .style("stroke-width", 2);
    })
    .on("mouseout", function(d) {
        d3.select("#arcSelection").remove();
    });

问题答案:

开发人员提出的解决方案之一是:“使用D3的sort运算符对元素进行重新排序”。

有鉴于此,人们可以通过比较元素的数据或元素的位置(如果它们是无数据元素)来对元素进行排序:

.on("mouseover", function(d) {
    svg.selectAll("path").sort(function (a, b) { // select the parent and sort the path's
      if (a.id != d.id) return -1;               // a is not the hovered element, send "a" to the back
      else return 1;                             // a is the hovered element, bring "a" to the front
  });
})


 类似资料:
  • 本文向大家介绍d3.js 使用D3 js创建SVG元素,包括了d3.js 使用D3 js创建SVG元素的使用技巧和注意事项,需要的朋友参考一下 示例 尽管D3并非专门用于处理SVG元素,但它已广泛用于创建和处理基于SVG的复杂数据可视化。D3提供了许多强大的方法,可帮助轻松创建各种几何SVG结构。 建议首先了解SVG规范的基本概念,然后使用大量的D3 js示例创建可视化效果。 D3 JS范例 SV

  • 问题内容: 假设我有几个复合形状()。我希望能够单击并拖动它们,但是我希望当前碰巧拖动的那个按Z顺序位于另一个的TOP上,因此,如果将其拖动到另一个,则另一个一个人应该黯然失色。 问题答案: SVG中的Z索引由元素在文档中出现的顺序定义。如果要在顶部显示特定形状,则必须更改元素顺序。

  • 问题内容: 假设我有以下代码: 现在,我需要在上面,但是在jsFiddle中,您可以看到child元素呈现在before之前。 如果您删除 类 或 ,则一切正常。这是我需要的正确行为: http //jsfiddle.net/ZjXMR/1/ 如何在不删除页面的情况下执行此操作? 问题答案: 这是不可能的,因为子级的设置与父级的堆叠索引相同。 您已经通过从父级移除z-index来解决该问题,将其保

  • 问题内容: 我需要一个动态元素始终出现在另一个元素的顶部,无论它们在DOM树中的顺序如何。这可能吗?我已经尝试了(和),但似乎没有用。 我需要: 呈现时完全相同。并且出于灵活性目的(我计划分发需要此功能的插件),我真的不想不必求助于绝对或固定位置。 为了执行我想要的功能,我做了一个条件语句,其中重叠的子元素将在阻止其父视图的情况下变得透明。这不是完美的,但它是某种东西。 问题答案: 如果元素构成层

  • 问题内容: 我用一个pre-pseudo元素创建了一个’header’元素。pseudeo元素必须位于父元素之后。一切正常,直到我给我的“页眉”添加z-index为止。 我想要的是:前景上的黄色“标头”,背景上的红色伪元素以及黄色“标头”元素上的简单z索引30。 您可以在此链接)上测试我的问题,当您在de’header’元素上设置/删除z-index时,您会看到问题。 问题答案: :: befor

  • 问题内容: 我想在z平面上订购3个HTML元素: 我希望 按钮 在 银行的 上方,但在 卡的背面 。但是无论我尝试什么,该 按钮 始终位于 银行 和 卡上 。 编辑:我注意到从’.bank’中删除z-index和transform可以解决它,但是我需要transform属性。 我能做什么? 是什么导致它无法正常工作?谢谢 问题答案: 不要指定任何内容以避免创建新的堆栈上下文,而只需调整其他元素的即