更新
var xpage = XHW.Xpage({
nid: 11145727, // 栏目id
onData: function(data){
console.log(data); //data是获取的json原始值
}
});
var xpage = XHW.Xpage(container, options);]
xpage.destroy() ,用于销毁 xpage 实例,从而复用分页容器 ] 2018.03.29 [ 添加实例方法
xpage.hasPage(page) 检查是否可加载指定页] 2018.03.29 [ 添加配置项
options.onBeforePageRender(pageHtml) 和 options.onAfterPageRender(pageHtml) 用来在分页内容渲染前和渲染后执行操作]options.noJson ,设置为true时,将不再加载远程数据,实现伪分页效果]
options.renderItem 核心方法的解读]
options.paginationButtonText, 配置翻页按钮标识 ], [ 添加配置项 options.paginationMarkCount, 配置页码显示数量
]
options.maxPage, 限制最大加载页数 ]
说明
xpage.js 是一款用于翔的通用分页组件,内置多种分页加载交互逻辑。不同于 Swiper,xpage 没有对页面结构做要求,更没有内置样式文件,一切列表渲染的逻辑交给使用者去实现,实现了数据层 ( model )和展示层 ( view ) 的分离。本文档介绍了 xpage 的基本用法和一些有意思的‘扩展’用法。
准备
Step1: 页面引入 jquery.js(插件依赖)
Step2: 页面引入 xpage.js
生产版本,2.95k min+gzip (请引入此文件)
http://www.xinhuanet.com/global/lib/xpage/xpage.min.js开发版本 (请不要引入此文件)
http://www.xinhuanet.com/global/lib/xpage/xpage.js示例
普通列表
滚动列表
分页列表
豪华版分页器:样样有!
迷你版分页器:适合移动端
私属版分页器:隐藏不需要的按钮(此处隐藏首页和尾页按钮)
用法
引入Xpage
<script src="http://www.xinhuanet.com/global/lib/xpage/xpage.min.js"></script>
Xpage构造函数被置于命名空间 XHW.Xpage 中,避免变量污染
实例化 Xpage
var xpage = new XHW.Xpage(container,options)
其中 container 为列表容器,组件内部通过 $(container) 的方式调用,所以可取 jquery 接受的选择器类型。 options 为组件参数。
参数[options]
xpage可以实现不同的加载交互模式,不同模式有共有的参数配置,也有独立的参数配置,
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| nid | string/number | 1 | 设置为2时将使用新的json接口,该接口有多的扩展属性 |
| version | number | 1 | 翔宇json接口版本,设置为 2 时将调用新接口,新接口Api测试 http://da.wa.news.cn/nodeart/page?nid=11142121&orderby=1&pgnum=1&cnt=1 新接口提供了更多稿件属性,修正了一些错误,下载文档 xy_json_api_v2.doc |
| mode | string | 'listView' |
列表加载模式:可选内置模式含
|
| pageSize | number | 10 | 页大小 |
| maxPage | number | 无 | 最大页数,可设置从 1 开始的整数 |
| item | jquery 支持的选择器 | 'li' | 列表元素的容器选择器,可取jquery支持的选择器 |
| attr | string/number | 空字符串 | 翔宇json接口请求参数,可取值 61(图片),62(头条),63(普通),其他 |
| noJson | boolean | false | 设置为true时将不再动态加载远程数据,只使用静态翔宇数据实现伪分页效果 |
| orderby | number | 0 | 设置稿件顺序,接口版本1可取值0,1(不好用), 接口版本2可取值1(默认排序),2(按发布时间逆序排序) |
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| moreButton | jquery 支持的选择器 | 无 | 引用加载更多按钮 |
| moreButtonState | object |
{
isEmpty: '暂无数据',
isHasMore: '查看更多',
isLoading: '加载中……',
isError: '加载失败,请重试',
isNoMore: '暂无更多'
}
|
不同加载状态下加载按钮的呈现形式,除了文字,也可以传入 html 字符串,配合 css 实现更多样的状态呈现。 |
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| moreTip | jquery 支持的选择器 | 无 | 引用加载更多提示 |
| moreTipState | object |
{
isEmpty: '暂无数据',
isHasMore: '滚动加载',
isLoading: '加载中……',
isError: '加载失败,请重试',
isNoMore: '暂无更多'
}
|
不同加载状态下加载提示的呈现形式,除了文字,也可以传入 html 字符串,配合 css 实现更多样的状态呈现。 |
| scrollWrapper | jquery 支持的选择器 | window | 引用滚动触发区,当滚动到底部时触发一次加载 |
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| pagination | jquery 支持的选择器 | 无 | 在此容器内构建分页页码组件 |
| paginationButtonText | object |
{
first: '<<',
last: '>>',
pre: '<',
next: '>'
}
|
分页按钮标识配置 |
| paginationMarkCount | number | 10 | 页码显示数量,用于根据需求减少需要显示的页码数量,最小值为1,表示只显示当前页码 |
| 方法名 | 参数 | 描述 |
|---|---|---|
| renderItem(item, index, list) |
|
同步渲染:需要显式返回数据渲染后的单条列表 html 字符串 * 此配置需和 renderItemAsyn() 二选一 |
| renderItemAsyn(item, index, list, render) |
|
异步渲染:异步获取数据后,调用render(html)。html为异步渲染后的单条 html 字符串 * 当需要通过额外的异步数据获取操作时使用此方法代替 renderItem() 方法 |
| onInit(xpage) |
| xpage初始化后被调用的第一个回调函数,且仅调用一次,此后便可以获取分页插件相关信息,比如可通过 xpage 的 xpage.getPage() 获取当前页
, xpage.getTotal() 获取总数, xpage.getTotalPage() 获取总页数等信息。
|
| onPageRender(pageHtml) |
|
组件渲染时调用,传入的 |
| onPageChange(page) |
|
加载新页时被调用 |
| onStatusChange(status) |
| 加载状态改变时被调用,有五种加载状态:
|
实例方法
| 方法名 | 参数 | 描述 |
|---|---|---|
| getPage() | 无 | 获取当前页码,在 xpage 任何回调函数中可用 |
| getTotal() | 无 | 获取列表总数,在 xpage 任何回调函数中可用 |
| getTotalPage() | 无 | 获取总页数,在 xpage 任何回调函数中可用 |
| nextPage() | 无 | 加载下一页,在 onInit 调用后可用 |
| prePage() | 无 | 加载上一页,在 onInit 调用后可用 |
| firstPage() | 无 | 加载第一页,在 onInit 调用后可用 |
| lastPage() | 无 | 加载最后一页,在 onInit 调用后可用 |
| goToPage(page) | page:number 加载第page页 | 加载第page页,在 onInit 调用后可用 |
renderItem
item参数
用于单条列表渲染的数据,格式如下:
{
"DocID":"1121349057",
"Title":"《建军大业》发布会 刘伟强:拍电影好看最重要。",
"NodeId":"11145727",
"PubTime":"2017-07-20 09:20:24",
"LinkUrl":"http://m.news.cn/ent/2017-07/20/c_1121349057.htm",
"Abstract":null,
"keyword":null,
"Editor":"张璐",
"Author":null,
"IsLink":"0",
"SourceName":"新华网",
"PicLinks":"1121349057_1500511948467_title.jpg"
,"IsMoreImg":"0",
"imgarray":[],
"SubTitle":null,
"Attr":61,
"m4v":null,
tarray":[],
"uarray":[],
"allPics":["http://m.xinhuanet.com/titlepic/112134/1121349057_1500511948467_title0h.jpg"],
"IntroTitle":"影视"
}
item 常用取值片段
- 标题
item.Title - 链接
item.LinkUrl - 副标题
item.SubTitle||'' - 摘要
item.Abstract||'' - 图片
item.allPics&&item.allPics[0] - (日期:2017/07/20)
item.PubTime.slice(0,10).replace(/\-/g,'/') - (日期:2017年07月20日)
item.PubTime.slice(0,10).replace('-','年').replace('-','月') + '日' - 作者
item.Editor||'' - 来源
item.SourceName||''
index参数
item === list[index];
list 参数
当前页 json 数据集合,每次调用 renderItem 时除了访问当前项数据 item,也可访问全部数据 list ,接口 v1.0 格式如下:
[{"DocID":"1121349057",
"Title":"《建军大业》发布会 刘伟强:拍电影好看最重要。",
"NodeId":"11145727",
"PubTime":"2017-07-20 09:20:24","LinkUrl":"http://m.news.cn/ent/2017-07/20/c_1121349057.htm",
"Abstract":null,
"keyword":null,
"Editor":"张璐",
"Author":null,
"IsLink":"0",
"SourceName":"新华网",
"PicLinks":"1121349057_1500511948467_title.jpg"
,"IsMoreImg":"0",
"imgarray":[],
"SubTitle":null,
"Attr":61,
"m4v":null,
tarray":[],
"uarray":[],
"allPics":["http://m.xinhuanet.com/titlepic/112134/1121349057_1500511948467_title0h.jpg"],
"IntroTitle":"影视"
},{"DocID":"1121348669",
"Title":"《锋味》爆新玩法 谢霆锋重金找大厨上演美食PK",
"NodeId":"11145727","PubTime":"2017-07-20 08:28:24","LinkUrl":"http://m.news.cn/ent/2017-07/20/c_1121348669.htm",
...
},{
...
}]
接口 v2.0 格式如下:
[
{
"DocID": 136514349,
"Title": "Peng Shuai, Sania Mirza advance to women's doubles quarterfinals",
"NodeId": 11142121,
"PubTime": "2017-08-10 09:30:03",
"LinkUrl": "http://news.xinhuanet.com/english/2017-08/10/c_136514349.htm",
"Abstract": "Peng Shuai (R) of China and Sania Mirza of India celebrate victory after the second round of women's doung",
"keyword": "Rogers Cup",
"Editor": "Yang Yi",
"Author": "Zou Zheng",
"IsLink": 0,
"SourceName": "Source: Xinhua",
"PicLinks": "http://www.xinhuanet.com/english/titlepic/13651/136514349_1312341013_title0h.jpg",
"IsMoreImg": 0,
"imgarray": [],
"SubTitle": null,
"Attr": 63,
"m4v": null,
"tarray": [],
"uarray": [],
"allPics": ["http://www.xinhuanet.com/english/titlepic/13651/136514349_1312341013_title0h.jpg"],
"IntroTitle": null,
"Ext1": null
"Ext2": null,
"Ext3": null,
"Ext4": null,
"Ext5": null,
"Ext6": null,
"Ext7": null,
"Ext8": null,
"Ext9": null,
"Ext10": null
},{
...
}
]
分析
结合item,index,list可精细化定制每条数据的渲染,比如通过判断index的奇偶性实现奇偶不同的渲染效果;判断 index/4 的取值实现4个一组的分组渲染;通过 list 在每次渲染时获取额外的数据加成...等等。