当前位置: 首页 > 知识库问答 >
问题:

用d3生成工作svg梯度

胡利
2023-03-14
function generateBlindGradient(svg, color, side) {
  // can't have a hash mark in the id or bad things will happen
  idColor = color.replace('#', '');
  side = side || 'right';
  // this is a sneaky d3 way to select the element if present
  // or create the element if it isn't
  var defs = svg.selectAll('defs').data([0]);
  defs.enter().append('svg:defs');

  var id = 'gradient-' + idColor + '-' + side;
  var gradient = defs.selectAll('lineargradient#'+id).data([0]);
  gradient.enter().append('svg:lineargradient')
    .attr('id', id);

  var colors = [
    { offset : '50%', color : '#DFE2E6' },
    { offset : side === 'left' ? '100%' : '0%', color : color }
  ];
  var stops = gradient.selectAll('stop').data(colors);
  stops.enter().append('svg:stop');
  stops.attr('stop-color', function(d) { return d.color; })
    .attr('offset', function(d) { return d.offset; });

  return id;
}
<lineargradient id="gradient-a8d4a1-left">
  <stop stop-color="#DFE2E6" offset="50%"></stop>
  <stop stop-color="#a8d4a1" offset="100%"></stop>
</lineargradient>

如果我使用web inspector来“编辑lineargradient元素的HTML”,即使我没有改变任何东西,梯度也会突然起作用--所以我猜Chrome的SVG解析或D3的元素生成中发生了一些奇怪的事情。

我认为这可能归因于lineargradientlineargradient之间的混淆-D3似乎在camelCased元素上有一些问题,当我让它创建lineargradient元素时,它不会选择它们(我得到了很多很多副本)。此外,在Chrome的检查器中,这些元素显示为lineargradient;当我编辑为HTML时,它们是lineargradient。我不知道这是怎么回事,也不知道该怎么解决。

共有1个答案

傅嘉悦
2023-03-14

SVG是区分大小写的,因此它的linearGradient而不是用于创建的linearGradient。

我认为Chrome有一个选择器错误,你不能选择骆驼外壳的元素。

常见的解决办法似乎是为所有linearGradient元素分配一个类,并按类而不是按标记名进行选择。

 类似资料:
  • 我正在尝试将不同颜色的渐变(意在象征一个调查中记录的不同答案的百分比)添加到一个svg形状(在本例中,该形状是用户点击过的一个国家)。我希望它看起来像这样(请忽略糟糕的颜色选择)。 然而,这个屏幕截图是在每个答案的百分比数据被硬编码时拍摄的(图中右侧可见),而不是从带有调查数据的csv文件中提取的。所以,我编写了这段代码,根据调查中的数据生成一个梯度。它计算收到的每个答案的百分比,并创建两个定义特

  • 本文向大家介绍java生成饼图svg及JFreeChart生成svg图表,包括了java生成饼图svg及JFreeChart生成svg图表的使用技巧和注意事项,需要的朋友参考一下 Jfreechart本身不能生成SVG图形,但是可以借助另外一个东西,辅助生成.好像是这个:batik ,具体代码请看下文 一:Java生成svg饼图,附带了一个标签显示各个颜色代表的部分 二.java生成SVG 3D饼

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

  • 问题内容: 我正在尝试在Django应用程序中使用Python从SVG输入文件生成PDF。 我已经找到了两个可行的解决方案:cairo + rsvg和imagemagick,但是它们都有一个问题:它们具有一些我不想安装在服务器上的奇怪的依赖项,例如DBUS和GTK。 因此,我正在寻求另一种从SVG生成PDF的方法,而不必在服务器上安装所有这些愚蠢的依赖项。 问题答案: 您考虑过svglib吗? 它

  • 我有个跟班问题。在构建我的应用程序时遇到这样一个错误,我找不到是怎么回事。 这是我的分级:

  • 我用角5.2.0和之。我只是t 到目前为止,我已经尝试最小化svg特定标签的数量,这样我就可以避免这个问题,但是,似乎我拥有的标签都需要正确渲染图像(将下面的版本保留为未剪切)。 我也试过把svg:前缀在前面 片段:https://stackblitz.com/edit/angular-wmhj27?file=app/app.component.html 欢迎任何建议/建议。 我已经排除了所有其他