javascript - 文本按字长对齐

标签 javascript html css arrays arraylist

我一直在从事一个与 spritz 应用程序具有相似结果的元素。基本上,它接受一个字符串,将每个单词转换成一个数组,然后一次显示每个输出。问题是我似乎无法找到一种方法来根据单词长度对齐每个单词(参见链接)。

这是我正在寻找的 spritz 输出的演示:http://imgur.com/a/UlZ6W

enter image description here enter image description here enter image description here

有谁知道如何根据单词的长度使输出居中?

即: 如果数组长度为1个字母,则居中字母 如果数组长度为 2 - 4,则将第二个字母居中 如果数组长度为 5 - 7,则将第三个字母居中 等。

最佳答案

一个可能对您有用的开始。

http://jsfiddle.net/kimiliini/ap64C/

使用一个元素来测量宽度。计算单词到中间 w/wo 中心字母的宽度。

例如有元素:

<span id="tw"></span>

和 CSS:

#tw { 
    position: absolute;
    visibility: hidden; 
    white-space: nowrap; 
    font: bold 18px Arial;
}

一个可以:

// get element
tw = document.getElementById('tw');
// set text
tw.textContent = 'foo';
// get width
tw.offsetWidth;

以此为基础,我们可以将单词分成三组:

  1. 属于中心字母左侧的字母。
  2. 左+中的字母。
  3. 中心后面的字母。

例子。有单词 starting 和一个我们想要居中的框,距左侧偏移 110 像素。

length = 8
left   = sta
center = r
right  = ting

width_left = 15
width_left + width_center = 19

mid = (19 - 15) / 2

box margin left = 110 - (width_left + mid)

简单,应该是重构代码,示例:

// span's for left, center and right
var tx = {
    L: document.getElementById('txt_L'),
    C: document.getElementById('txt_C'),
    R: document.getElementById('txt_R')
};
// Box to that holds span's, to set margin left on.
var b = document.getElementById('bw');

function width(w) {
    tw.textContent = w;
    return tw.offsetWidth;
}
function middle(w) {
    var n = w.length,
        // Center char calculation. 1=1, 2-5=2, 6-8=3, ...
        c = ~~((n + 1) / 3) + 1,
        z = {};
    z.a = width(w.substr(0, c - 1));
    z.b = width(w.substr(0, c));
    z.c = (z.b - z.a) / 2;
    b.style.marginLeft = ~~(110 - (z.a + z.c)) + 'px';

    tx.L.textContent = w.substr(0, c - 1);
    tx.C.textContent = w.substr(c - 1, 1);
    tx.R.textContent = w.substr(c);
}

关于javascript - 文本按字长对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22650128/

相关文章:

html - 通过输入类型文件使用相机时 iOS 6 出现问题

css - React 中的样式固定位置

css - 使用 Espresso 在单行和多行 CSS 之间切换

javascript - 获取插入到 Set 中的最后一个值

javascript - 为什么我的 javascript 参数没有传递 "by reference"?

javascript - Bootbox 警报未显示在 Laravel View 中

html - 100% 高度的表格布局,带有可滚动的列

html - 无法使外部样式表工作

html - 空的 div 和可点击的 url

javascript - 如何在使用 datetimepicker 时显示 future 7 天?