текст d3 обрезан / выходит за пределы области диаграммы

#javascript #object #d3.js

#javascript #объект #d3.js

Вопрос:

Текст выходит за пределы диаграммы. Идея в том, что если i больше 1500, а длина заголовка больше 5 символов, то текст сдвигается влево на 100 пикселей.

Что я делаю не так?

введите описание изображения здесь

Codepen

Вот мой подход:

 let rect = svg.selectAll('g')
    .data(combined)
    .enter()
    .append('g')
    .on('mouseover', function () {

      d3.select(this)
        .append('text')
        .attr('class', 'text')
        .attr('x', function (d) {
          return xScale(d.revenue);
        })
        .attr('y', function (d) {
          return yScale.bandwidth()   175;
        })
        .style('font-size', 10)
        .attr('dy', -20)
        .attr('dx', function (d, i) {
          if (d.title.length > 5 amp;amp; i > 1500) {
            return -100;
          } else {
            return 10;
          }
        })
        .text(d => d.title)
    })
    .on("mouseout", function () {
      d3.select('.text')
        .remove();

    });
  

Комментарии:

1. это ваш i> 1500 — такого никогда не бывает…

2. Если вы хотите предотвратить обрезку текста, у вас должно быть условие типа: if (d3.select(this).attr(«x») > 400) или лучше установить привязку текста на основе позиции для достижения этого

3. спасибо, это работает, если вы опубликуете ответ, я приму его

Ответ №1:

i Относится к индексу элементов выделения, поскольку у вас есть только один, i никогда не превышает 0.

Если вы хотите предотвратить обрезку текста, у вас должно быть условие типа:

 if (d3.select(this).attr("x") > 400)
...
  

или лучше установить привязку текста на основе позиции, чтобы добиться этого.