javascript - 如何使用 d3.js 按单个单词分隔和包装 SVG 文本元素?

标签 javascript d3.js

我有以下单词和颜色数组:

let dat = [{"word": "Lorum", "color": "red"}, 
     {"word": "ipsum", "color": "green"},
     {"word": "dolor", "color": "blue"},
     {"word": "sit", "color": "purple"},
     {"word": "amet", "color": "yellow"},
     {"word": "consectetur", "color": "orange"},
     {"word": "adipiscing", "color": "red"},
     {"word": "elit", "color": "purple"},
     {"word": "sed", "color": "blue"},
     {"word": "eiusmod", "color": "blue"},
     {"word": "tempor", "color": "green"}];

使用 d3.js,我想:(1)沿 x 轴均匀地间隔这些单词; (2) 将单词相应地换行到给定的宽度(将单词移动到下一行)。

I started a jsfiddle here,但现在的单词都共享 x 和 y 坐标。我希望它以句子的形式出现。

最佳答案

添加了以下代码,该代码将使用 foreignObject 来附加数据,就像我们在 HTML 中所做的那样。现在,只需进行少量操作,我就添加带有所需颜色属性的 span 标记。

const width = 400,
  height = 400;
let svg = d3.select("body").append("svg")
  .attr("width", width)
  .attr("height", height)

let dat = [{
    "word": "Lorum",
    "color": "red"
  },
  {
    "word": "ipsum",
    "color": "green"
  },
  {
    "word": "dolor",
    "color": "blue"
  },
  {
    "word": "sit",
    "color": "purple"
  },
  {
    "word": "amet",
    "color": "yellow"
  },
  {
    "word": "consectetur",
    "color": "orange"
  },
  {
    "word": "adipiscing",
    "color": "red"
  },
  {
    "word": "elit",
    "color": "purple"
  },
  {
    "word": "sed",
    "color": "blue"
  },
  {
    "word": "eiusmod",
    "color": "blue"
  },
  {
    "word": "tempor",
    "color": "green"
  }
];

const a = svg.append("foreignObject")
  .attr("width", 300)
  .attr("height", 200)
  .append("xhtml:body")
  .append('div')
  .attr('id', 'foriegnBody')
  .style("font", "14px 'Helvetica Neue'")

for (const data of dat) {
  const value = document.getElementById('foriegnBody').innerHTML;
  if (value) {
    a.html(`${value} <span style="color: ${data.color}">${data.word}</span>`)
  } else {
    a.html(`<span style="color: ${data.color}">${data.word}</span>`)
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

关于javascript - 如何使用 d3.js 按单个单词分隔和包装 SVG 文本元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60469204/

相关文章:

javascript - 如何使用 Typescript 正确设置 axios 客户端?

javascript - 使用scrollMagic从右向左滑动动画

charts - nvd3堆积面积图看起来有问题如何解决?

javascript - D3.js 加载完成后缩放特定路径

javascript - Jquery draggable droppable 无法显示多个 div

javascript - setTimeout 如何查看模块内的私有(private)函数?

javascript - 如何使用带有 Derby 数据库的jsf在谷歌地图上动态创建多边形?

d3.js - 如何使用 d3.js 对分箱时间序列求和?

javascript - 如何使用 D3 制作三重条形图?

javascript - 如何在 D3.JS 或 moment 中解析像 '2009-09-13' 这样的日期