2014-12-04 3 views
0

Я пытаюсь сориентировать свой текст Y-ярлык, чтобы идти сверху вниз - у меня он работает снизу вверх, но изменение вращения не делает это для меняКак изменить ориентацию текста svg

Вот мой Plunkr - http://plnkr.co/edit/ghP0armaGK7NYhZfhzTs?p=preview

код, который представляет интерес

svg.append("text") 
      .attr("class", "y label") 
      .attr("text-anchor", "end") 
      .attr("y", -width/12) 
      .attr("x", -height/3) 
      .attr("dx","-5em") 
      .attr("dy", "-.75em") 
      .attr("transform", "rotate(-90)") 
      .text(yLabel); 

с -90 Y-Лейбл «Value» идет снизу вверх, но то, что я хочу, это «вершина» на «дно ».

(я пытался -270 только увидеть текст собьют из экрана. Я явно не понимая, как преобразование поворота работы)

Благодарности

ответ

0

Абсолютно не нужно тратить время на вычисление смещений вращающихся элементов. У вас будет только уродливое пюре чисел, которое никому не будет иметь смысла и будет кошмаром для поддержания.

SVG renderer может выполнить все эти вычисления для вас. Просто используйте элемент <g>, чтобы преобразовать начало координат в нужное место, а затем выполните поворот. Все, что родилось на этом элементе, затем вращается вокруг него, а не вращается вокруг какого-то далекого неродственного местоположения.

Вот быстрый хак, чтобы показать вам, как это работает. Возможно, вам придется отрегулировать некоторые из значений, но я надеюсь, что вы получите картину.

svg.append("g") 
.attr("transform", "translate(-"+width*0.1+","+height*0.45+")") 
.append("text") 
.attr("class", "y label") 
.attr("text-anchor", "end") 
.attr("transform", "rotate(-90)") 
.text(yLabel); 
+0

Это работает аккуратно. Спасибо. – user2789284

0

После поворота, вам нужно перевести текст, смещение по оси Y и смещение высоты (текст вращается вокруг заданных x и y для элемента, а не центра отображаемого текста, как вы ожидали). Например, модифицируя перевести это задание (вы хотите использовать переменные надлежащим образом, я просто подключить в числах, которые работали в качестве примера):

.attr("transform", "translate(-75, 350) rotate(90)") 

Вы также можете изменить ваш x и y так что он является центром текстового элемента (с использованием dx и dy для надлежащего смещения), так что текст вращается вокруг центральной точки, что, вероятно, является более чистым подходом, но я стараюсь просто сделать перевод и встать на моем пути.

+0

Благодарим за это. Это работает, но я не понимаю, почему это работает. Как вы пришли к номерам -75 и 350? Я предполагаю, что это какая-то функция моей ширины и высоты svg. Что вы подразумеваете под «x» и «y» для элемента; вы имеете в виду сам текстовый элемент? – user2789284

+0

Да, свойство x и y текстового элемента. Это точка начала вращения. Дополнительную информацию можно найти на странице http://tutorials.jenkov.com/svg/svg-transformation.html#rotate и многое другое, что вы можете сделать с текстом, начиная с http://tutorials.jenkov.com/svg/text-element. HTML # поворотно-текст. Альтернативой методу, который я показал, является передача в новую точку происхождения вашего вращения. – Bill

Смежные вопросы