TPMlist.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //列表插件
  2. //元素属性: data-api,请求api地址 ; data-datas 请求参数 data-tpl 模板地址 data-tabletpagesize 平板每页显示条数, data-phonepagesize 手机每页显示条数
  3. //author : luofei614<http://weibo.com/luofei614>
  4. ;(function($){
  5. $.fn.extend({
  6. 'TPMlist':function(options){
  7. var defaults={
  8. "param_pagesize":"pagesize",
  9. "param_page":"page",
  10. "tabletpagesize":40,
  11. "phonepagesize":20
  12. };
  13. options=$.extend(defaults,options);
  14. $(this).each(function(){
  15. //获得api
  16. var api=$(this).data('api');
  17. //获得请求参数
  18. var datas=$(this).data('datas');
  19. //获得模板
  20. var tpl=$(this).data('tpl');
  21. //获得数据集合名称
  22. //获得pagesize
  23. var type=$(window).height()>767?'tablet':'phone';
  24. var defaultpagesize='tablet'==type?options.tabletpagesize:options.phonepagesize;//默认每页显示条数
  25. var pagesize=$(this).data(type+'pagesize') || defaultpagesize;
  26. $children=$('<div><div class="list_content">加载中..</div></div>').appendTo(this).find('.list_content');
  27. //下拉刷新
  28. var sc=$(this).TPMpulltorefresh(function(){
  29. $children.TPMgetListData(api,datas,tpl,pagesize,1,this,options);
  30. });
  31. $children.TPMgetListData(api,datas,tpl,pagesize,1,sc,options);
  32. });
  33. },
  34. 'TPMgetListData':function(api,datas,tpl,pagesize,page,sc,options){
  35. var params=datas?datas.split('&'):{};
  36. var datas_obj={};
  37. for(var i=0;i<params.length;i++){
  38. var p=params[i].split('=');
  39. datas_obj[p[0]]=p[1];
  40. }
  41. datas_obj[options.param_pagesize]=pagesize;
  42. datas_obj[options.param_page]=page;
  43. var $this=$(this);
  44. //请求api
  45. TPM.sendAjax(api,datas_obj,'get',function(response){
  46. //渲染模板
  47. $.get(tpl,function(d,x,s){
  48. var html=TPM.parseTpl(d,response);
  49. //判断是否为第一页,如果为第一页,清空以前数据然后重新加载,如果不是第一页数据进行累加
  50. if(1==page){
  51. $this.empty();
  52. }
  53. $this.find('.getmore').remove();//删除以前的加载更多
  54. $this.append(html);
  55. if(response.currentpage!=response.totalpages){
  56. //加载更多按钮
  57. $more=$('<div class="getmore">加载更多</div>');
  58. $more.appendTo($this);
  59. $more.click(function(){
  60. $(this).html('加载中...');//TODO 加载中样式
  61. $this.TPMgetListData(api,datas,tpl,pagesize,parseInt($this.data('currentpage'))+1,sc,options);
  62. });
  63. }
  64. sc.refresh();//iscroll refresh;
  65. //记录当前页面
  66. $this.data('currentpage',response.currentpage);
  67. },'text')
  68. });
  69. },
  70. //下拉刷新
  71. 'TPMpulltorefresh':function(cb){
  72. //增加下拉刷新提示层
  73. var $pulldown=$('<div class="pullDown"><span class="pullDownIcon"></span><span class="pullDownLabel">下拉可以刷新</span></div>')
  74. $pulldown.prependTo($(this).children());
  75. var offset=$pulldown.outerHeight(true);
  76. var myScroll=new iScroll($(this)[0],{
  77. useTransition: true,
  78. topOffset:offset,
  79. hideScrollbar:true,
  80. onRefresh: function () {
  81. $pulldown.removeClass('loading');
  82. $pulldown.find('.pullDownLabel').html('下拉可以刷新');
  83. },
  84. onScrollMove: function () {
  85. if (this.y > 5 && !$pulldown.is('.flip')) {
  86. $pulldown.addClass('flip');
  87. $pulldown.find('.pullDownLabel').html('松开可以刷新');
  88. this.minScrollY = 0;
  89. } else if (this.y < 5 && $pulldown.is('.flip')) {
  90. $pulldown.removeClass('flip');
  91. $pulldown.find('.pullDownLabel').html('下拉可以刷新');
  92. this.minScrollY = -offset;
  93. }
  94. },
  95. onScrollEnd: function () {
  96. if($pulldown.is('.flip')){
  97. $pulldown.removeClass('flip');
  98. $pulldown.addClass('loading');
  99. $pulldown.find('.pullDownLabel').html('加载中...');
  100. cb.call(this);//触发回调函数
  101. }
  102. }
  103. });
  104. return myScroll;
  105. }
  106. });
  107. })(jQuery);