在一个容器中只显示8行文本
Display only 8 lines of text in a container
我有一个独特的情况,我想创建一个只显示8行文本的函数。该网站反应迅速。以下是我尝试过的:
var fontSize = $target.css("font-size").match(/'d/g).join(""),
lineWidth = $target.width(),
totalLetters = $target.text().length,
lettersPerLine = (totalLetters * fontSize) / lineWidth,
numOfLines = Math.round(totalLetters/lettersPerLine);
问题:
- 我使用的字体不是等宽的,这意味着并非所有字母的宽度都相等
- 我不想把WordsPerLine作为参数传递给我要写的函数,我想让它计算这个
- 我不确定/找不到浏览器是如何将文本换行的。例如,如果
<p>
的宽度是600px,那么很明显900个单词不能放在一行中。。浏览器将把文本换行。。但是浏览器是如何做到这一点的,它是否插入了一个换行符'n
- 上面的代码不适用于我,我不知道为什么。。。如果你有线索(我相信你们这些聪明人肯定知道我做错了什么),请澄清一下。我们非常感谢所有的建议
在想知道这几次之后,我想出了一个办法,通过渲染字符来预先计算字符的高度和宽度,缓存并生成查找函数。
以下作品只要是body > span
就会被渲染。参数是可选的,默认为body > span
的样式和字体的第一个255
字符。
function charSizes(numChars, cssFont) {
var span = document.createElement('span'),
text = document.createTextNode(''),
uia, i, j;
span.appendChild(text);
if (cssFont) span.style.font = cssFont;
span.style.padding = span.style.margin = 'none';
document.body.appendChild(span);
numChars = (numChars || 255);
uia = new Uint32Array(numChars * 2);
for (j = i = 0; i < numChars; j = 2 * ++i) {
text.data = String.fromCharCode(i);
uia[j] = span.offsetWidth;
uia[j + 1] = span.offsetHeight;
}
// free memory
document.body.removeChild(span);
span = text = numChars = cssFont = null;
// output lookup function
return function (c) {
var i = c.charCodeAt(0) * 2;
return {
width: uia[i],
height: uia[i + 1]
};
};
}
var arial12 = charSizes(0xFF, '12px Arial');
现在你可以很容易地查找字符
arial12('a'); // {width: 7, height: 15}
arial12('-'); // {width: 5, height: 15}
简单的css解决方案是将容器的高度设置为8em
,并将溢出设置为hidden
。
在实践中,我发现这是不准确的。这里有一个jQuery解决方案(假设我有一个id为bozo
的div
):
JavaScript
function getFontHeight(className) {
$testdiv = $('<div stlye="white-space:nowrap;">jgpqAZ</div>');
if (className) $testdiv.addClass(className);
$('body').append($testdiv);
var height = $testdiv.innerHeight();
$testdiv.remove();
return height;
}
$('#bozo').height(getFontHeight() * 8);
CSS
#bozo {
overflow: hidden;
width:100%;
}
jsFiddle
相关文章:
- 如何在单击按钮时显示2行1列的表格
- 由于本地存储代理,Extjs网格面板最多显示25行.如何更改此限制值
- 如果 jqxgrid 中的“单列”中没有数据,则突出显示整行
- JQuery:如何计算要在容器中显示的行数
- 基于复选框隐藏/显示表格行
- 根据在“搜索表单”中键入的内容隐藏和显示表行
- 如何删除backgridjs行以显示新行
- 使用JQuery和IE在悬停时高亮显示表行-所有版本
- 图例不会显示所有行的行 Rgraph
- 如何在按钮单击时显示表格行
- JavaScript下拉列表根据值隐藏/显示表行
- 用谷歌代码美化突出显示一些行
- GridX 显示每行的相同数据
- 如何使用 CSS 和 jQuery 根据表单元格值有条件地在悬停时突出显示表行
- 在文本区域中显示页面行
- 突出显示表格行,根据其列使用不同的颜色
- 剑道网格 - 选择行并显示与行相关的值
- 突出显示表格行中项目之间的差异
- ng-repeat显示的行等于属性的数量,甚至不在HTML视图上显示数据
- 如何根据选中的复选框显示表行