xpage.js 文档

2018.04.13 [添加 XHW.Xpage(options) 调用方式,适用于只用来获取json数据的情况]
    var xpage = XHW.Xpage({
        nid: 11145727, // 栏目id
        onData: function(data){
            console.log(data); //data是获取的json原始值
        }
    }); 
2018.04.13 [兼容不带 new 的调用方式,即 var xpage = XHW.Xpage(container, options);]
2018.03.30 [ 添加字符串模版支持,使用方法请看:示例 / 普通列表 / js]
2018.03.29 [ 添加实例方法 xpage.destroy() ,用于销毁 xpage 实例,从而复用分页容器 ]
2018.03.29 [ 添加实例方法 xpage.hasPage(page) 检查是否可加载指定页]
2018.03.29 [ 添加配置项 options.onBeforePageRender(pageHtml) 和 options.onAfterPageRender(pageHtml) 用来在分页内容渲染前和渲染后执行操作]
2017.11.17 [ 添加配置项 options.version ,设置为2时可调用新JSON API,新Api文档 xy_json_api_v2.doc ]
2017.09.20 [ 添加配置项 options.noJson ,设置为true时,将不再加载远程数据,实现伪分页效果]
2017.08.14 [ 在置顶示例中,强调了 Xpage 模板的使用方法,并丰富了示例内容]
2017.07.20 [ 添加配置项 options.renderItem 核心方法的解读]
2017.07.11 [ 添加类方法 Xpage.tmpl(templateHTml/templateId [,data]) 作为可选的模板引擎, 使用方法: https://johnresig.com/blog/javascript-micro-templating/ ] 废弃
2017.06.05 [ 添加配置项 options.paginationButtonText, 配置翻页按钮标识 ], [ 添加配置项 options.paginationMarkCount, 配置页码显示数量 ]
2017.06.02 [ 添加配置项 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
That's all!

普通列表

实例:

滚动列表

实例:

分页列表

实例:

豪华版分页器:样样有!

迷你版分页器:适合移动端

私属版分页器:隐藏不需要的按钮(此处隐藏首页和尾页按钮)

引入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'

列表加载模式:可选内置模式含

  1. 普通列表 'listView'
  2. 滚动列表 'listView-scroll'
  3. 分页列表 'pageView'
  4. 自由模式 'raw' 其他内置模式均扩展自该模式
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(按发布时间逆序排序)
普通列表 [ mode = listView ]
名称 类型 默认值 描述
moreButton jquery 支持的选择器 无 引用加载更多按钮
moreButtonState object
{
    isEmpty: '暂无数据',
    isHasMore: '查看更多',
    isLoading: '加载中……',
    isError: '加载失败,请重试',
    isNoMore: '暂无更多'
}
                            
不同加载状态下加载按钮的呈现形式,除了文字,也可以传入 html 字符串,配合 css 实现更多样的状态呈现。
滚动列表 [ mode = listView-scroll ]
名称 类型 默认值 描述
moreTip jquery 支持的选择器 无 引用加载更多提示
moreTipState object
{
    isEmpty: '暂无数据',
    isHasMore: '滚动加载',
    isLoading: '加载中……',
    isError: '加载失败,请重试',
    isNoMore: '暂无更多'
}
                            
不同加载状态下加载提示的呈现形式,除了文字,也可以传入 html 字符串,配合 css 实现更多样的状态呈现。
scrollWrapper jquery 支持的选择器 window 引用滚动触发区,当滚动到底部时触发一次加载
分页列表 [ mode = pageView ]
名称 类型 默认值 描述
pagination jquery 支持的选择器 无 在此容器内构建分页页码组件
paginationButtonText object
{
    first: '<<',
    last: '>>',
    pre: '<',
    next: '>'
}
                            
分页按钮标识配置
paginationMarkCount number 10 页码显示数量,用于根据需求减少需要显示的页码数量,最小值为1,表示只显示当前页码
共有回调函数

所有回调函数调用上下文(this) 均引用 xpage 实例,可用来调用实例方法和属性

方法名 参数 描述
renderItem(item, index, list)
  • item: object 单条列表数据对象
  • index: number 元素在当前页的序号
  • list: array 当前页列表数据对象集合

同步渲染:需要显式返回数据渲染后的单条列表 html 字符串

* 此配置需和 renderItemAsyn() 二选一

renderItemAsyn(item, index, list, render)
  • item: object 单条列表数据对象
  • index: number 元素在当前页的序号
  • list: array 当前页列表数据对象集合
  • render: function 列表元素渲染回调函数

异步渲染:异步获取数据后,调用render(html)。html为异步渲染后的单条 html 字符串

* 当需要通过额外的异步数据获取操作时使用此方法代替 renderItem() 方法

onInit(xpage)
  • xpage:Xpage Xpage对象实例
xpage初始化后被调用的第一个回调函数,且仅调用一次,此后便可以获取分页插件相关信息,比如可通过 xpage 的 xpage.getPage() 获取当前页 , xpage.getTotal() 获取总数, xpage.getTotalPage() 获取总页数等信息。
onPageRender(pageHtml)
  • pageHtml: string 当前页渲染后的html字符串

组件渲染时调用,传入的 pageHtml 由 renderItem()渲染

onPageChange(page)
  • page:number 当前页码

加载新页时被调用

onStatusChange(status)
  • status: number 加载状态码
加载状态改变时被调用,有五种加载状态:
  • 0 数据为空
  • 1 加载成功,并可继续加载
  • 2 加载中
  • 3 加载失败
  • 4 加载到最后一页

实例方法

请注意,不同于swiper,由于xpage数据和结构是动态加载和创建的,所以请确保在适当的时候调用实例方法来获得正确的执行效果,合理的方式是在 xpage 对应的回调函数内调用这些方法

方法名 参数 描述
getPage() 无 获取当前页码,在 xpage 任何回调函数中可用
getTotal() 无 获取列表总数,在 xpage 任何回调函数中可用
getTotalPage() 无 获取总页数,在 xpage 任何回调函数中可用
nextPage() 无 加载下一页,在 onInit 调用后可用
prePage() 无 加载上一页,在 onInit 调用后可用
firstPage() 无 加载第一页,在 onInit 调用后可用
lastPage() 无 加载最后一页,在 onInit 调用后可用
goToPage(page) page:number 加载第page页 加载第page页,在 onInit 调用后可用
renderItem(item, index, list) 是 xpage 中用来渲染列表的核心函数,组件内部循环调用该方法实现列表渲染,返回值应为每一个列表项对应的html字符串,返回值支持模板语法 {{prop}};

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参数

当前列表项序号,取值区间[0,pageSize-1],可知 renderItem 每次调用时 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 在每次渲染时获取额外的数据加成...等等。

图文列表

实例:

图像查看器

实例:
<
>
loading...
010020010010000000000000011200000000000000