1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
/** * * @param total 总页数 * @param curr 当前页 * @param bothEndPad 前后边距数 * @param midPad 中间边距数 * @returns {string} */ function doPage(total, curr, bothEndPad, midPad) { //少于8条全部显示,多于8条只显示最前面2条最后面2条 以及当前页前后2条 if (typeof(bothEndPad) == "undefined") bothEndPad = 3; if (typeof(midPad) == "undefined") midPad = 3; var tpl = '', //curr = 7, //total = 13, pageArr = []; var showArr=[]; for (var i = 1; i <= total; i++) { pageArr.push(i); } var index = pageArr.indexOf(curr); function filterShowingPage() { return pageArr.filter(function (v, i) { return total < 8 || v <= bothEndPad || v > total - bothEndPad || Math.abs(v - curr) < midPad; }) } var _arr = filterShowingPage(), last = 0; $.each(_arr, function (i, v) { if (v - last != 1) { tpl += '......'; showArr[showArr.length]={ isHide:true, idx:null } } last = v; if (v === curr) { tpl += " [" + curr + "]"; showArr[showArr.length]={ isAct:true, idx:v } } else { tpl += ' ' + v + ''; showArr[showArr.length]={ idx:v } } }) console.log(curr + " --> " + tpl); return showArr; } |
测试
1 2 3 4 |
var total = 17; for (var k = 1; k <= total; k++) { doPage(total, k, 3, 3); } |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
1 --> [1] 2 3...... 15 16 17 2 --> 1 [2] 3 4...... 15 16 17 3 --> 1 2 [3] 4 5...... 15 16 17 4 --> 1 2 3 [4] 5 6...... 15 16 17 5 --> 1 2 3 4 [5] 6 7...... 15 16 17 6 --> 1 2 3 4 5 [6] 7 8...... 15 16 17 7 --> 1 2 3...... 5 6 [7] 8 9...... 15 16 17 8 --> 1 2 3...... 6 7 [8] 9 10...... 15 16 17 9 --> 1 2 3...... 7 8 [9] 10 11...... 15 16 17 10 --> 1 2 3...... 8 9 [10] 11 12...... 15 16 17 11 --> 1 2 3...... 9 10 [11] 12 13...... 15 16 17 12 --> 1 2 3...... 10 11 [12] 13 14 15 16 17 13 --> 1 2 3...... 11 12 [13] 14 15 16 17 14 --> 1 2 3...... 12 13 [14] 15 16 17 15 --> 1 2 3...... 13 14 [15] 16 17 16 --> 1 2 3...... 14 15 [16] 17 17 --> 1 2 3...... 15 16 [17] |