svg.js:水平偏移换行tspans以创建交错的外观

时间:2018-05-25 12:47:06

标签: javascript jquery html css svg.js

是否有适当的方法在每个新行中水平偏移tspans?我想创建一个交错效果,以便所有新行都偏移前一行的宽度,例如:

  <div class="row">
     <div class="col">
     </div>
     <div class="col">
         <div class="row">
         </div>
         <div class="row">
         </div>
         <div class="row">
         </div>
  </div>
  </div>

我必须按照以下内容给出一个文本块,其中所有行都在相同的x位置开始:

sentence 1
          sentence 2
                    sentence 3 
                              etc

我知道这只能用纯html和css轻松实现,但它必须是svg元素,以便我可以在以后添加水平流动的动画。然后所有交错的线应该从右向左流动。

1 个答案:

答案 0 :(得分:0)

找到了一种很简单的解决方案(仅适用于等宽字体):

<span id="ruler" style="visibility:hidden">x</span>添加到了我的index.html

let ruler = $('#ruler');
// get pixel length of one char
let char_unit = ruler.width();

let content = SVG('text-box'); // initialize svg element
let sentences = ["sentence 1", "sentence 2", "sentence 3"];

// create a text block
let text_block = content.text(function (add) {
    // create tspans for every sentence
    let sent_offset = 0;
    for (let i = 0; i < sentences.length; i++) {
        add.tspan(sentences[i]).newLine().dx(sent_offset); // added x offset
        // compute offset depending on length of preceding sentence and ruler value
        sent_offset += (sentences[i].length * char_unit); 
    }
});

它不是100%准确,但足以达到我的目的。让我知道是否有人找到了更好的(也许不太hacky)的解决方案。