• weUI之分页查询实现


    本文旨在介绍移动端h5分页查询实现

    1.前端html

        前端基于weui 样式库实现   参考http://jqweui.com/

     1   <div class="weui-search-bar" id="searchBar">
     2             <form class="weui-search-bar__form">
     3                 <div class="weui-search-bar__box">
     4                     <i class="weui-icon-search"></i>
     5                     <input type="search" class="weui-search-bar__input" id="searchInput" placeholder="搜索您想要的商品" required=required />
     6                     <a href="javascript:" class="weui-icon-clear" id="searchClear"></a>
     7                 </div>
     8                 <label class="weui-search-bar__label" id="searchText" style="transform-origin: 0px 0px 0px; opacity: 1; transform: scale(1, 1);">
     9                     <i class="weui-icon-search" id="search"></i>
    10                     <span>搜索您想要的商品</span>
    11                 </label>
    12             </form>
    13             <button type="button" class="btn btn-info btn-xs" style="margin-left:5px" id="btn-search">搜索</button>
    14            
    15         </div>
    View Code

    2.js前端分页

     1             //全局变量
     2             var load = false; // load为判断接口是否请求完成,防止多次触摸、多次点击导致接口的多次请求出错
     3             var page = 1;//默认第一页
     4             
     5             $(function () {
     6                 getData(page, "/Home/GetProListJson"); //初始化数据从第一页数据开始请求            
     7             });
     8 
     9             //请求后台数据
    10             function getData(page, url) {  //请求接口的方法,方法带page,url两个参数。
    11                 $('#more').text('正在加载中...');
    12                 $.ajax({
    13                     url: url,  //请求接口的url
    14                     type: 'get',//请求方式(post或get)默认为get
    15                     async: true,  //默认情况下是true表示所有请求为异步请求,如果要为同步则用false
    16                     cache: false,//默认为false,设置为false将不会从浏览器缓存中加载请求信息。
    17                     dataType: "json",
    18                     data: {
    19                         'page': page,
    20                         'limit': 6,
    21                         'name': $("#searchInput").val()
    22                     },
    23                     success: function (data) {  //请求成功调用的回调函数
    24                         if (data.code == 0) {
    25                             $("#pageNum").val(parseInt(data.currentPage) + 1);
    26                             showList(data);
    27                             if (data.currentPage >= data.totalPage) { //这里判断接口数据是否到底部
    28                                 load = true;
    29                                 $("#more").html('已经到底了');
    30                             } else if (data.currentPage < data.totalPage) {
    31                                 load = false;
    32                                 $("#more").html('查看更多');
    33                             }
    34                         }
    35                     },
    36                     error: function (error) { //请求失败调用的回调函数
    37                         console.log(error);
    38                     }
    39                 });
    40             }
    41             //显示数据
    42             function showList(data) {   //显示列表的html内容
    43                 for (var i = 0; i < data.list.length; i++) {
    44                     var html = "<li>"
    45                     html += "<a href='/Home/ProInfo?id=" + data.list[i].Goods_Id + "'>"
    46                     html += " <div class='proimg'><img src='" + data.list[i].Img_Url + "' /></div>";
    47                     html += " </a>";
    48                     html += " <div class='protxt'>";
    49                     html += " <div class='name'>" + data.list[i].Goods_Name + "</div>";
    50                     html += " <div class='wy-pro-pri'>¥<span>" + data.list[i].Goods_Price + "</span></div>";
    51                     html += "</div>";
    52                     html += "<div class='button_sp_area'><a href='javascript: ;' class='weui-btn weui_btn_mini weui-btn_primary' id='btn-mianfei'>免费领取</a></div>";
    53                     $("#goodslist").append(html);
    54 
    55                 }
    56             }
    57             //继续加载按钮事件  ,点击按钮后请求换页的数据
    58             $(document).on("click", '#more', function () {
    59                 if (load == false) {
    60                     $("#goodslist").append(html);
    61                     load = true;
    62                     $("#pageNum").val(1);
    63                     page = $("#pageNum").val();
    64                     getData(page, "/Home/GetProListJson");
    65                 }
    66             }) 
    67             //搜索功能
    68             $(document).on("click", "#btn-search", function () {
    69                 if (load == false) {
    70                     $("#goodslist").empty();
    71                     load = true;
    72                     $("#pageNum").val(1);
    73                     page = $("#pageNum").val();
    74                     getData(page, "/Home/GetProListJson");
    75                 }
    76             });
    77 
    78             //==============核心代码=============  
    79             //鼠标向下滚动加载下一页数据,或者移动端向下滑动加载下一页数据
    80             var winH = $(window).height(); //页面可视区域高度  
    81             var scrollHandler = function () {
    82                 var pageH = $(document.body).height();
    83                 var scrollT = $(window).scrollTop(); //滚动条top   
    84                 var aa = (pageH - winH - scrollT) / winH;
    85                 if (aa < 0.02) {//0.02是个参数 
    86                     if (load == false) {
    87                         load = true;
    88                         page = $("#pageNum").val();
    89                         getData(page, "/Home/GetProListJson");
    90                     }
    91 
    92                 }
    93             }
    94             //定义鼠标滚动事件  
    95             $(window).scroll(scrollHandler);  
    View Code

    3.后端数据接口

    后端实现比较简单,只要注意返回json数据格式的定义,这里只介绍下控制器实现代码

     1         [HttpGet]
     2         public ActionResult GetProListJson(Pagination pagination)
     3         {
     4             var ret = new
     5             {            
     6                 code = 0,
     7                 msg = "",
     8                 list = goodsApp.GetList(Request["name"], pagination),
     9                 currentPage = pagination.page,
    10                 count = pagination.total,
    11                 totalPage= pagination.total/pagination.limit
    12             };
    13             return Content(ret.ToJson());
    14         }
    View Code

    4.总结

       1.首先定义请求参数,这里面参数是{'page': page,limit': 6,'name': $("#searchInput").val()}

       2.确定哪些参数是从页面获取,比如这里面查询参数name;确定哪些参数是动态变化的,这里面是page 

       3.页面状态的变化,比如在这有两种状态,数据已加载完和未加载完

       4.还有js方法的封装,注意单一职能原则,毕竟js也是面向对象的语言

  • 相关阅读:
    String类的concat()方法
    字符串转换为时间类型
    translate函数
    弹出窗口
    数据库大小写问题
    360浏览器屏蔽广告
    String.valueOf()
    测试
    选择排序算法
    输出101~200内的质数
  • 原文地址:https://www.cnblogs.com/wktang/p/10547616.html
Copyright © 2020-2023  润新知