上拉加载and下拉刷新

github:https://github.com/JiaoMeichen/pull-refresh

  • html
<div id="wrapper">
    <ul>
         
    </ul>
</div>
<script src="iscroll.js"></script>
<script src="pullToRefresh.js"></script>
<script src="index.js"></script>
  • css
#wrapper{position:absolute;top:50px;bottom:0;z-index:1;width:100%}/*外层元素*/
.scroller{position:absolute;z-index:1;padding:0;width:100%;-webkit-tap-highlight-color:transparent}/*自己生成*/
.scroller li{min-height:70px;font-size:14px}
.pullDown,.pullUp{height:40px;color:#888;text-align:center;font-size:12px;line-height:40px}
.pullUp{display:block}/*上拉下拉样式*/
.loader{display:inline-block;display:none;padding:0;font-size:0}/*加载中的四个小点*/
.loader span{display:inline-block;margin:0 2px;width:10px;height:10px;border-radius:100%;vertical-align:middle;-webkit-animation:loader .8s linear infinite alternate;animation:loader .8s linear infinite alternate}
.loader span:nth-child(1){background:rgba(245,103,115,.6);-webkit-animation-delay:-1s;animation-delay:-1s}
.loader span:nth-child(2){background:rgba(245,103,115,.8);-webkit-animation-delay:-.8s;animation-delay:-.8s}
.loader span:nth-child(3){background:rgba(245,103,115,1);-webkit-animation-delay:-.26666s;animation-delay:-.26666s}
.loader span:nth-child(4){background:rgba(245,103,115,.8);-webkit-animation-delay:-.8s;animation-delay:-.8s}
.loader span:nth-child(5){background:rgba(245,103,115,.4);-webkit-animation-delay:-1s;animation-delay:-1s}
@keyframes loader{from{transform:scale(0,0)}to{transform:scale(1,1)}}/*动画*/
@-webkit-keyframes loader{from{-webkit-transform:scale(0,0)}to{-webkit-transform:scale(1,1)}}
  • index.js
function exchange(pageSize, pageNum, maxVirtualCoin, minVirtualCoin) {
    $.ajax({
        type: "post",
        url: "url",
        data: {pageSize: pageSize,pageNum: pageNum,maxVirtualCoin: maxVirtualCoin,minVirtualCoin: minVirtualCoin},
        beforeSend: function(request) { request.setRequestHeader("userId","6a025914-772e-4cba-9af5-4a6ab1fbfb8e");},
        async: false,
        success: function(result) {
            var res = JSON.parse(result);
            if(res.result == 1) {
                var str = "";
                if((res.data==null && pageNum==1) ||(res.data.length==0 && pageNum==1)){-----data为空数组时
//***************************if(!res.data && pageNum==1) ----------返回数据data不存在时
                    mui.toast("暂无更多数据~")
                    $(".pullUpLabel").html("")
                    $("#exchange_buyList").html("");
                }else if( res.data.length == 0 && pageNum !=1){
//**************************} else if(!res.data && pageNum != 1) {
                    $(".pullUpLabel").html("已全部加载~")
                    console.log($(".pullUpLabel").html())
                    mui.toast("已全部加载~")
                }else{
                    for(var i = 0; i < res.data.length; i++) {
                        str += "字符串拼接";
                    }
                    if(pageNum == 1){
                        $("#exchange_buyList").html(str);
                    }else {
                        $("#exchange_buyList").append(str);
                    }
                }
            } else  {
                mui.toast("已经全部加载啦~")
            }
        },
        error: function() {
            mui.toast("error")
        }
    });
}
refresher.init({
    id: "wrapper",//外层元素
    pullDownAction: Refresh,//执行刷新函数
    pullUpAction: Load//执行加载函数
});
function Refresh() {
    setTimeout(function() { // <-- 模拟网络拥塞,从生产清除setTimeout!
        pageNum = 1;
        exchange(pageSize, pageNum, maxVirtualCoin, minVirtualCoin);//ajax函数    
        wrapper.refresh(); //记得刷新后,动作完成!
    }, 1000);
}
function Load() {
    setTimeout(function() { // <-- 模拟网络拥塞,从生产清除setTimeout!
        pageNum += 1;
        exchange(pageSize, pageNum, maxVirtualCoin, minVirtualCoin);//ajax函数
        wrapper.refresh(); //记得刷新后,动作完成!
    }, 1000);
}
  • pullToRefresh.js
var refresher = {
    info: {
        "pullDownLable": "下拉刷新...", 
        "pullingDownLable": "释放刷新...",
        "pullUpLable": "上拉加载更多...",
        "pullingUpLable": "释放加载...",
        "loadingLable": "拼命加载中..."
    },
    init: function(parameter) {
        var wrapper = document.getElementById(parameter.id);
        var div = document.createElement("div");
        div.className = "scroller";
        wrapper.appendChild(div);
        var scroller = wrapper.querySelector(".scroller");
        var list = wrapper.querySelector("#" + parameter.id + " ul");
        scroller.insertBefore(list, scroller.childNodes[0]);
        var pullDown = document.createElement("div");
        pullDown.className = "pullDown";
        var loader = document.createElement("div");
        loader.className = "loader";
        for (var i = 0; i < 4; i++) {
            var span = document.createElement("span");
            loader.appendChild(span);
        }
        pullDown.appendChild(loader);
        var pullDownLabel = document.createElement("div");
        pullDownLabel.className = "pullDownLabel";
        pullDown.appendChild(pullDownLabel);
        scroller.insertBefore(pullDown, scroller.childNodes[0]);
        var pullUp = document.createElement("div");
        pullUp.className = "pullUp";
        var loader = document.createElement("div");
        loader.className = "loader";
        for (var i = 0; i < 4; i++) {
            var span = document.createElement("span");
            loader.appendChild(span);
        }
        pullUp.appendChild(loader);
        var pullUpLabel = document.createElement("div");
        pullUpLabel.className = "pullUpLabel";
        var content = document.createTextNode(refresher.info.pullUpLable);
        pullUpLabel.appendChild(content);
        pullUp.appendChild(pullUpLabel);
        scroller.appendChild(pullUp);
        var pullDownEl = wrapper.querySelector(".pullDown");
        var pullDownOffset = pullDownEl.offsetHeight;
        var pullUpEl = wrapper.querySelector(".pullUp");
        var pullUpOffset = pullUpEl.offsetHeight;
        this.scrollIt(parameter, pullDownEl, pullDownOffset, pullUpEl, pullUpOffset);
    },
    scrollIt: function(parameter, pullDownEl, pullDownOffset, pullUpEl, pullUpOffset) {
        eval(parameter.id + "= new iScroll(parameter.id, {useTransition: true,vScrollbar: false,topOffset: pullDownOffset,onRefresh: function () {refresher.onRelease(pullDownEl,pullUpEl);},onScrollMove: function () {refresher.onScrolling(this,pullDownEl,pullUpEl,pullUpOffset);},onScrollEnd: function () {refresher.onPulling(pullDownEl,parameter.pullDownAction,pullUpEl,parameter.pullUpAction);},})");
        pullDownEl.querySelector('.pullDownLabel').innerHTML = refresher.info.pullDownLable;
        document.addEventListener('touchmove', function(e) {
            e.preventDefault();
        }, false);
    },
    onScrolling: function(e, pullDownEl, pullUpEl, pullUpOffset) {
        if (e.y > -(pullUpOffset)) {
            pullDownEl.id = '';
            pullDownEl.querySelector('.pullDownLabel').innerHTML = refresher.info.pullDownLable;
            e.minScrollY = -pullUpOffset;
        }
        if (e.y > 0) {
            pullDownEl.classList.add("flip");
            pullDownEl.querySelector('.pullDownLabel').innerHTML = refresher.info.pullingDownLable;
            e.minScrollY = 0;
        }
        if (e.scrollerH < e.wrapperH && e.y < (e.minScrollY - pullUpOffset) || e.scrollerH > e.wrapperH && e.y < (e.maxScrollY - pullUpOffset)) {
            pullUpEl.style.display = "block";
            pullUpEl.classList.add("flip");
            pullUpEl.querySelector('.pullUpLabel').innerHTML = refresher.info.pullingUpLable;
        }
        if (e.scrollerH < e.wrapperH && e.y > (e.minScrollY - pullUpOffset) && pullUpEl.id.match('flip') || e.scrollerH > e.wrapperH && e.y > (e.maxScrollY - pullUpOffset) && pullUpEl.id.match('flip')) {
            pullDownEl.classList.remove("flip");
            pullUpEl.querySelector('.pullUpLabel').innerHTML = refresher.info.pullUpLable;
        }
    },
    onRelease: function(pullDownEl, pullUpEl) {
        if (pullDownEl.className.match('loading')) {
            pullDownEl.classList.toggle("loading");
            pullDownEl.querySelector('.pullDownLabel').innerHTML = refresher.info.pullDownLable;
            pullDownEl.querySelector('.loader').style.display = "none"
            pullDownEl.style.lineHeight = pullDownEl.offsetHeight + "px";
        }
        if (pullUpEl.className.match('loading')) {
            pullUpEl.classList.toggle("loading");
            pullUpEl.querySelector('.pullUpLabel').innerHTML = refresher.info.pullUpLable;
            pullUpEl.querySelector('.loader').style.display = "none"
            pullUpEl.style.lineHeight = pullUpEl.offsetHeight + "px";
        }
    },
    onPulling: function(pullDownEl, pullDownAction, pullUpEl, pullUpAction) {
        if (pullDownEl.className.match('flip') /*&&!pullUpEl.className.match('loading')*/ ) {
            pullDownEl.classList.add("loading");
            pullDownEl.classList.remove("flip");
            pullDownEl.querySelector('.pullDownLabel').innerHTML = refresher.info.loadingLable;
            pullDownEl.querySelector('.loader').style.display = "block"
            pullDownEl.style.lineHeight = "20px";
            if (pullDownAction) pullDownAction();
        }
        if (pullUpEl.className.match('flip') /*&&!pullDownEl.className.match('loading')*/ ) {
            pullUpEl.classList.add("loading");
            pullUpEl.classList.remove("flip");
            pullUpEl.querySelector('.pullUpLabel').innerHTML = refresher.info.loadingLable;
            pullUpEl.querySelector('.loader').style.display = "block"
            pullUpEl.style.lineHeight = "20px";
            if (pullUpAction) pullUpAction();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,722评论 1 92
  • 目录: 1-------- 走进前端 2-------- jQuery 3-------- CSS ...
    vikang阅读 11,064评论 29 445
  • 总该长大 总该试着去成熟 放弃一些曾经你以为不可分离的东西 即使这个过程漫长且难捱 当做睡前关上的灯吧 天总会亮的
    一个luki阅读 124评论 0 0
  • 2017-6-15 易婧妮是我小学六年级一直到中专的同学,两人家里离得也近,知根知底。她毕业后就留在长沙从事音乐教...
    榕嬷嬷阅读 405评论 0 0
  • 上午教学设计,虽然拖堂,但是连续两周没有作业还是很爽的下午去跟小萌老师聊天啦题目终于确定好了也找缪老师谈了教师研修...
    dq920813阅读 106评论 0 0