每日一题:分页组件
分页组件
介绍
分页组件是常用的组件,通过使用分页组件减少后端的查询时间,不会因为数据加载过多影响页面显示性能。本题需要在已提供的基础项目中,完成一个分页组件。
准备
开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
1 | ├── effect.gif |
其中:
index.html是主页面。js/index.js是待完善的 js 文件。js/data.json是存放数据的 json 文件。js/axios.min.js是 axios 文件。js/util.js是存放工具方法 util 文件。css/index.css是 css 样式文件。effect.gif是完成的效果图。
注意:打开环境后发现缺少项目代码,请复制下述命令至命令行进行下载。
1 | cd /home/project |
在浏览器中预览 index.html 页面,显示如下所示:

目标
请在 js/index.js 和 js/util.js 文件中补全代码。
最终效果可参考文件夹下面的 gif 图,图片名称为 effect.gif(提示:可以通过 VS Code 或者浏览器预览 gif 图片)。

具体需求如下:
- 补全
js/index.js中的ajax函数,完成数据请求(数据来源./js/data.json),data.json中存放的数据为 100 条文章标题,点击和评论量。根据函数参数获得当前页的数据和总页数,并最终返回(即return)。在项目目录下已经提供了 axios,考生可自行选择是否使用。
其中 ajax 函数的参数列表说明如下:
| 参数名 | 描述 |
|---|---|
| url | 接口地址 |
| method | 请求方式 |
| data | 可选,请求接口所需传递的参数 |
| query | 分页请求时所需的参数对象,currentPage 属性为当前页码,pageSize 为每页显示条目个数 |
ajax 函数返回的数据格式如下:
1 | result = { |
- 补全
js/index.js中的initEvents函数,给分页组件的按钮绑定事件。要求如下:
- 点击 “<” 按钮时,当前页码
this.currentPage在原基础上减 1,最小为 1。 - 点击 “>” 按钮时,当前页码
this.currentPage在原基础上加 1,最大为this.totalPages。 this.currentPage值改变时,页面上的分页组件效果同步更新。
- 补全
js/util.js中的createPaginationIndexArr函数,根据函数参数按照一定规则生成分页数组indexArr并返回(即return)。
其中 createPaginationIndexArr 函数的参数列表说明如下:
| 参数名 | 描述 |
|---|---|
| currentPage | 当前页数 |
| totalPages | 总的页码数 |
| pagerCount | 最多页码按钮数 |
生成分页数组的规则如下所示:
- 特殊情况:
totalPages<=pagerCount
| 测试数据 1 | totalPages:5 pagerCount:5 | 测试数据 2 | totalPages:3 pagerCount:5 |
|---|---|---|---|
| currentPage | indexArr | currentPage | indexArr |
| 1,2,3,4,5 | [1,2,3,4,5] | 1,2,3 | [1,2,3] |
- 正常情况:
totalPages>pagerCount
| 测试数据 1 | totalPages:14 pagerCount:5 | 测试数据 2 | totalPages:10 pagerCount:5 | 测试数据 3 | totalPages:10 pagerCount:6 |
|---|---|---|---|---|---|
| currentPage | indexArr | currentPage | indexArr | currentPage | indexArr |
| 1,2,3 | [1,2,3,4,14] | 1,2,3 | [1,2,3,4,10] | 1,2,3,4 | [1,2,3,4,5,10] |
| 4 | [1,3,4,5,14] | 4 | [1,3,4,5,10] | 5 | [1,3,4,5,6,10] |
| 5 | [1,4,5,6,14] | 5 | [1,4,5,6,10] | 6 | [1,4,5,6,7,10] |
| 6 | [1,5,6,7,14] | 6 | [1,5,6,7,10] | 7,8,9,10 | [1,6,7,8,9,10] |
| 7 | [1,6,7,8,14] | 7 | [1,6,7,8,10] | ||
| 8 | [1,7,8,9,14] | 8,9,10 | [1,7,8,9,10] | ||
| 9 | [1,8,9,10,14] | ||||
| 10 | [1,9,10,11,14] | ||||
| 11 | [1,10,11,12,14] | ||||
| 12,13,14 | [1,11,12,13,14] |
注意:
createPaginationIndexArr函数检测时使用的输入数据与题目中给出的示例数据可能是不同的。考生的程序必须是通用的,不能只对需求中给定的数据有效。
- 补全
js/index.js中的renderPagination函数,根据indexArr数组生成分页组件的字符串模板template。规则如下:
1 | /* |
规定
- 请勿修改
js/index.js文件外的任何内容。 - 请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径、class 名、id 名、图片名等,以免造成无法判题通过。
createPaginationIndexArr函数检测时使用的输入数据与题目中给出的示例数据可能是不同的。考生的程序必须是通用的,不能只对需求中给定的数据有效。- 满足需求后,保持 Web 服务处于可以正常访问状态,点击「提交检测」系统会自动检测。
判分标准
- 完成目标 1,得 4 分。
- 完成目标 2,得 3 分。
- 完成目标 3,得 9 分。
- 在目标 3 的基础上完成目标 4,得 9 分。
总通过次数: 174 | 总提交次数: 382 | 通过率: 45.5%
难度: 困难 标签: 2022, 省模拟赛, Web 前端, JavaScript
题解
1 | async function ajax({ |
1 | initEvents() { |
1 | const createPaginationIndexArr = (currentPage, totalPages, pagerCount) => { |
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 江月迟迟!
