适用js实现 假设一个页面可用区域开始高度是从startHeight到endHeight,我要在这个可用区域里写文本,每条文本占用一行,已知1、一个文本的数组strLines内部有strLines.length条文本,2、每条文本行高fontSize*1.15 3、写strLines.length条文本一共分为divideNuber页。 现在想取得 分页时那条文本的索引并将其push进一个数组内,得到一个分页索引的一个数组
时间: 2024-03-17 21:40:36 浏览: 63
可以使用如下的 JavaScript 代码实现:
```javascript
function getPageIndexes(startHeight, endHeight, fontSize, strLines, divideNumber) {
const pageLineCount = Math.floor((endHeight - startHeight) / (fontSize * 1.15));
const pageIndexes = [];
let lineCount = 0;
for (let i = 0; i < strLines.length; i++) {
const lineNum = Math.ceil(strLines[i].length / pageLineCount);
lineCount += lineNum;
if (lineCount >= pageLineCount) {
pageIndexes.push(i);
lineCount -= pageLineCount;
}
}
if (lineCount > 0) {
pageIndexes.push(strLines.length);
}
const pageIndexesWithDivide = [];
let startIndex = 0;
for (let i = 1; i <= divideNumber; i++) {
const endIndex = Math.floor(i / divideNumber * pageIndexes.length);
pageIndexesWithDivide.push(pageIndexes.slice(startIndex, endIndex));
startIndex = endIndex;
}
return pageIndexesWithDivide;
}
```
该函数接收页面可用区域的开始高度 `startHeight`、结束高度 `endHeight`、文本行高 `fontSize`、文本数组 `strLines` 以及分页数 `divideNumber` 作为参数。它首先计算出每一页可显示的文本行数,然后使用循环遍历文本数组,在每个文本后面添加一个换行符,并计算该文本占用的行数。在计算过程中,它会记录已经写入的文本行数,并在达到一页可显示的文本行数时将当前文本的索引添加到分页索引数组中。最后,如果最后一页的文本行数不足一页可显示的文本行数,则将文本数组的长度添加到分页索引数组中。
接着,它将得到的分页索引数组根据分页数 `divideNumber` 进行切分,并返回一个二维数组,其中的每一个子数组表示对应分页的最后一条文本的索引。
阅读全文