自动换行功能不创建新行

汽车

我有一个带有标题的d3图表。标题是图表。但是,在小屏幕上,文本需要换行以免溢出。

但是,Bl.ocks文本换行方法不是创建新行,而是为每个单词创建一个新的tspan,然后将每个文本/ tspan放在另一个顶部

这是问题的jsfiddle此处的jsfiddle

这是相关的代码

var chartTitle = svg.append("text")
                .attr("y", -15 )
                .attr("text-anchor", "start")  
                .text("This is a very long chart title that should be wrapped!")
                .attr('class','chartTitle')
                      .call(wrap, width/2);



        function wrap(text, width) {
            text.each(function() {
              var text = d3.select(this),
                  words = text.text().split(/\s+/).reverse(),
                  word,
                  line = [],
                  lineNumber = 0,
                  lineHeight = 1.1, // ems
                  y = text.attr("y"),
                  dy = parseFloat(text.attr("dy")),
                  tspan = text.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em");
              while (word = words.pop()) {
                line.push(word);
                tspan.text(line.join(" "));
                if (tspan.node().getComputedTextLength() > width) {
                  line.pop();
                  tspan.text(line.join(" "));
                  line = [word];
                  tspan = text.append("tspan").attr("x", 0).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word);
                }
              }
            });
          }

的CSS

.chartTitle{
  font-size:20px;
}
杰拉尔多·富塔多

wrap函数最初由Mike Bostock(D3创建者)编写,用于包装标签函数使用textdy属性(由轴生成器自动创建)。就是说,您的代码的问题dy在于该文本元素中没有属性。

您可以简单地调整函数或仅设置零dy属性。这是使用后者的演示:

var svg = d3.select("body")
  .append("svg");

var chartTitle = svg.append("text")
  .attr("y", 20)
  .attr("dy", 0)//set the dy attribute
  .attr("text-anchor", "start")
  .text("This is a very long chart title that should be wrapped!")
  .attr('class', 'chartTitle')
  .call(wrap, 300 / 2);

function wrap(text, width) {
  text.each(function() {
    var text = d3.select(this),
      words = text.text().split(/\s+/).reverse(),
      word,
      line = [],
      lineNumber = 0,
      lineHeight = 1.1, // ems
      y = text.attr("y"),
      dy = parseFloat(text.attr("dy")),
      tspan = text.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em");
    while (word = words.pop()) {
      line.push(word);
      tspan.text(line.join(" "));
      if (tspan.node().getComputedTextLength() > width) {
        line.pop();
        tspan.text(line.join(" "));
        line = [word];
        tspan = text.append("tspan").attr("x", 0).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word);
      }
    }
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过单击按钮并将容器自动换行到Flutter中的新行,在Container中创建多个动态卡

来自分类Dev

如何创建自动换行?

来自分类Dev

使换行自动在新列的第三行开始

来自分类Dev

自动完成功能不适用于新的SWIFT文件/类

来自分类Dev

Perl打印功能自动换行

来自分类Dev

我为emacs创建函数时,bash自动完成功能不起作用

来自分类Dev

我为emacs创建函数时,bash自动完成功能不起作用

来自分类Dev

在素数面上创建行后,Java 自动完成功能不起作用

来自分类Dev

应用功能并创建新行

来自分类Dev

自动重复功能不起作用

来自分类Dev

自动溢出功能不起作用

来自分类Dev

如何启用python repl自动完成功能并仍然允许新的换行符

来自分类Dev

插入带有SH1加密值的新行-“功能不存在”

来自分类Dev

重叠行/自动换行 CSS

来自分类Dev

自动补全功能不会自动完成

来自分类Dev

自动跳转自动完成功能不起作用

来自分类Dev

自动补全功能不会自动完成

来自分类Dev

如何创建自动换行菜单项

来自分类Dev

组合框自动完成功能不起作用

来自分类Dev

Redshift Copy和自动增量功能不起作用

来自分类Dev

阿尔及利亚角度自动完成功能不起作用

来自分类Dev

Toad:表自动完成功能不起作用

来自分类Dev

vscode键入自动完成功能不起作用

来自分类Dev

自动完成功能不再起作用

来自分类Dev

为什么我的自动填充功能不起作用?

来自分类Dev

自动完成功能不执行任何操作。怎么了?

来自分类Dev

自动完成功能不显示在MVC中的图像

来自分类Dev

jQuery自动完成功能不起作用?

来自分类Dev

自动完成功能不起作用

Related 相关文章

热门标签

归档