zoukankan      html  css  js  c++  java
  • 一个Ajax读数据并使用IScroll显示辅助类

    花了2天时间对iscroll进行了一些封装,方便进行ajax读取数据和显示

    1、IScroll直接使用的话还是挺麻烦的,特别是牵涉到分页加载动态加载数据时,以下是核心实现代码。

    2、Loading提示,和空数据提示样式,由于篇幅限制不再粘贴,大家可以自己完善。

    3、版本是IScroll5

    var UseIScrollHelper = {
        myScroll: null,  //iScroll对象
        scrollId: 'divscroll',//默认scrollid
        wrapperId: 'wrapper',//默认wrapperid
        fillList: null,  //对应的回调函数
        isMore: false,   //是否可刷新标记
        isNoData: false, //是否无数据
        isLoading: false,//是否加载数据中
        isUsePage: true,  //是否使用分页
        headAndBottomHeight:0,    //顶部预留高度
        pageIndex: 1,
        pageSize: 10,
        url: '',
        datas: '',
        //显示空文本提示
        checkIsScrollEmptyAndTiShi: function () {
            if ($("#" + this.scrollId).html().trim() === "") {
                this.isNoData = true;
                this.showEmptyTiShi("#" + this.scrollId, "暂无数据");
                $("#" + this.scrollId).css("min-height", "0px");
                $("#" + this.scrollId).height("");
            }
        },
        //空列表时显示提示信息
        showEmptyTiShi: function (target, description) {
            try  {
                var tishi = "<div>无数据</div>";
                $(target).html(tishi);
            }
            catch (e) { alert(e); }
        },
        //设置ScrollHeight
        setScrollHeight: function () {
            var temp_height = 0;
            temp_height = $("#"+this.wrapperId).height();
            try {
                var showHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - this.headAndBottomHeight;
                if (temp_height !== showHeight)
                    temp_height = showHeight;
            }
            catch (e) { ; };
            $("#" + this.wrapperId).height(temp_height);
            if (!this.isNoData)//有数据
            {
                $("#" + this.scrollId).css("min-height", temp_height + 1);
                $("#" + this.scrollId).height("");
            } else {//无数据
                $("#" + this.scrollId).css("min-height", 0);
                $("#" + this.scrollId).height("");
            }
            if (this.myScroll === undefined || this.myScroll === null) this.loadSroll();
            else this.myScroll.refresh();
        },
        //清空数据
        clearData: function () {
            $("#" + this.scrollId).html("");
            $("#" + this.scrollId).css("min-height", 0);
            $("#" + this.scrollId).height("");
            if (this.myScroll === undefined || this.myScroll === null) this.loadSroll();
            else this.myScroll.refresh();
        },
        //加载Iscroll
        loadSroll: function () {
            setTimeout(function (obj) {
                obj.myScroll = new IScroll("#" + obj.wrapperId, { click: true });
                obj.myScroll.on('scrollStart', function () {
                    document.activeElement.blur();
                });
                obj.myScroll.on('scrollEnd', function () {
                    
                    if (obj.isMore === false) {
                        obj.setScrollHeight();
                        return;
                    }
                    if (this.y <= this.maxScrollY) {
                        if (obj.isMore === false) {
                            obj.setScrollHeight();
                            this.refresh();
                            return;
                        }
                        if (obj.getData !== null) {
                            obj.getData();
                        }
                        this.refresh();
                    } else {
                        this.refresh();
                    }
                });
            }, 100,this);
        },
        //从服务端读数据
        getData: function () {
            try {
                if (this.isLoading) return;
                if (this.isNoData) return;
                this.isLoading = true;
                var obj = this;
                var url = this.url;
                //有分页标志才启用分页参数
                if (this.isUsePage) {
                    url = url + "&pageIndex=" + this.pageIndex + "&pageSize=" + this.pageSize;
                }
                $.ajax({
                    url: url, 
                    type: "post",
                    dataType: "json",
                    data: this.datas,
                    success: function (p_datas) {
                        bhttooler.nologinDeal(p_datas);
                        if (p_datas[0].result === "success") {
                            if (obj.fillList !== null)
                                obj.fillList(p_datas[0].datas);
                            if (obj.isUsePage) {//有分页标志进行判断
                                if (p_datas[0].isMore === "True") {
                                    obj.pageIndex = obj.pageIndex + 1;
                                    obj.isMore = true;
                                } else {
                                    obj.isMore = false;
                                }
                            }
                        }
                        obj.checkIsScrollEmptyAndTiShi();
                        bhttooler.hideLoadding();
                        obj.setScrollHeight();
                        obj.isLoading = false;
                    },
                    fail: function () {
                        obj.checkIsScrollEmptyAndTiShi();
                        obj.setScrollHeight();
                        obj.isLoading = false;
                    }
                });
            }
            catch (e) {
                this.checkIsScrollEmptyAndTiShi();
                this.setScrollHeight();
                this.isLoading = false;
            }
    
        }
    
    };

    前台示例使用方法:

    <div id="celltemplate" style="display:none">
         <div class="weui-cells">
            <a class="weui-cell weui-cell_access" href="#">
                <div class="weui-cell__hd ">
                    #title#
                </div>
            </a>
        </div>
    </div>
    <div class="page tabbar js_show">
            <div class="page__bd" style="height: 100%;">
                <div class="weui-tab">
                    <div class="weui-tab__panel" style="padding-bottom: 0px;">
                        <div id="wrapper" >
                            <div id="divscroll">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
     window.onload = function () {
                mobanhtml = $('#celltemplate').html();
                UseIScrollHelper.fillList = FillList;
                UseIScrollHelper.url = "XXXXXXXXXXXXXXXX";
                UseIScrollHelper.datas = "";
                UseIScrollHelper.getData();
            }
            function FillList(listdata) {
                
                for (var i = 0; i < listdata.length; i++) {
                var datas = listdata[i];
                    var inserthtml = mobanhtml
                        .replace("#title#", datas.title)
                    $('#divscroll').append(inserthtml);
                }
            }
    #wrapper {
        overflow: hidden;
        position:relative;
    }
    /*必须设置为absolute不然会遮挡一部分*/
    #divscroll {
        position: absolute;
        width: 100%;
    
    }

    如果一个页面有多个IScroll,请使用以下代码生成实例

    var renYuanScroller = Object.create(UseIScrollHelper);

    后台返回数据代码(C#示例)。

     string strJson = ""datas":" + Newtonsoft.Json.JsonConvert.SerializeObject(dtTemp, new Newtonsoft.Json.Converters.DataTableConverter());
     string Json = "[{"result":"success","isMore":"" + isMore + ""," + strJson + "}]";
     Response.Write(Json);
  • 相关阅读:
    Linux调试工具
    LINUX总结第13篇:LINUX下动态库及版本号控制
    linux虚拟机无法上网 Network is unreachable
    VMware 如何通过现有虚拟机克隆新的虚拟机 (图文)
    Win10下安装虚拟机提示“Intel VT-x处于禁用状态”如何解决
    VMware安装Centos7超详细过程(图文)
    kubernetes---CentOS7安装kubernetes1.11.2图文完整版
    通过Idea进行Kubernetes YAML开发
    如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
    SpringBoot + Spring Security 基本使用及个性化登录配置详解
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/10749857.html
Copyright © 2011-2022 走看看