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字符串

组件渲染时调用,传入的 pageHtmlrenderItem()渲染

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