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

标签 javascript jquery html css svg.js

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

sentence 1
          sentence 2
                    sentence 3 
                              etc

我必须遵循这给了我一个文本 block ,其中所有行都从相同的 x 位置开始:

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
    for (let i = 0; i < sentences.length; i++) {
        add.tspan(sentences[i]).newLine(); 
    }
});

我知道这只使用纯 html 和 css 很容易实现,但它必须是 svg 元素,这样我以后才能添加水平流动的动画。所有交错的线条都应该从右向左流动。

最佳答案

找到了一个有点老套的解决方案(只适用于等宽字体):

已添加 <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% 准确,但足以满足我的目的。让我知道是否有人找到更好的(可能不那么古怪)解决方案。

关于javascript - svg.js:水平偏移换行符 tspans 以创建交错外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50529604/

相关文章:

html - 是否可以使用 CSS 将字体大小调整为 div 宽度?

javascript - keyup 更改未在 js 文件中触发

jquery - 优化jquery添加和删除类

javascript - 为什么 IE7 javascript array.indexOf 不工作?

javascript - VueJs 操作内联模板并重新初始化它

php - Codeigniter ajax 分页搜索结果不起作用

html - Fullpage.JS 背景图片的理想图片大小

javascript - 如何在客户端/客户端计算机上主动运行 PHP 脚本?

javascript - 无法让 setTimeout 在 javascript 中工作

javascript - 客户端 IFRAME 中的沙盒内容