如何在浏览器中对文本进行分页?

时间:2018-11-13 15:09:58

标签: javascript html css browser scrollbar

假设我在变量wandp中包含“战争与和平”文本。

是否可以通过任何方式编写函数,使得page(n)将返回正确数量的文本以填充当前的浏览器窗口,其中nwandp中的字符索引。

我希望文本的大小正确,即没有明显的空格或滚动条。

我想我正在寻找一种针对浏览器的电子书算法的文本描述。

P.S。我敢肯定,章节和其他布局功能会带来一些麻烦,但是它们可以等待。

1 个答案:

答案 0 :(得分:1)

借用Work out how many characters can fit into DIV with JavaScript的想法,我将创建一个隐藏的<div>并将该元素的宽度设置为等于浏览器窗口的宽度。然后,我将创建一个函数来添加wandp中的文本,并在添加时检查<div>元素的高度,直到<div>元素的高度等于浏览器窗口的高度

它可能看起来像这样:

HTML:

...
<div id="normalDiv" style="width: 100%; overflow: hidden"></div>
<div id="hiddenDiv" style="visibility: hidden; width: 100%;"></div>
...

Javascript:

...
var targetHeight = window.innerHeight - 40; //browser window height minus height of last line of text
var wandp = 'The entire content of War and Peace...';
var startChar = 0;
var endChar = 0;
for(var i=startChar; i < wandp.length; i++){
    endChar = i;
    document.getElementById('hiddenDiv').innerHTML += wandp.charAt(i);
    if (document.getElementById('hiddenDiv').clientHeight > targetHeight){
        endChar--;
        break;
    }
}
document.getElementById('normalDiv').innerHTML = wandp.substring(startChar, endChar);
...

请记住,这将导致文本截断,因为它将上升到适合约束的绝对最后一个字符。为了使页面上的文本以合理的字符(遇到的最后一个句号,遇到的最后一个空格之前的字符等)结尾,您将需要一点创意。