简易h5下拉刷新插件

前言:第一次写H5页面由于页面中的列表数据需要做分页,搜索了许多相关的下拉刷新插件使用起来都比较复杂,索性自己写了一个较为简单的分页加载相关的插件;
(ps:由于使用过程中考虑的局限性可能会存在一些问题,欢迎大家使用并提出问题,空闲时间我会优化问题)

1.使用pulltorefresh.js

/**
 * Created by yunzao on 2017/12/27.
 */
(function (window) {
    var u = {};
    var slideView = null;
    var moveMaxHeight = 50;//移动多少距离触发
    var tempHeight = 0;
    var scrollTop = 0;//滚动条距离顶部的位置
    var touchStartY = 0;
    var touchMoveY = 0;
    var touchEndY = 0;
    var addHeader = false;//头部是否已添加了
    var addFooter = false;//底部是否已添加了
    var loadMoreSuc = true;//默认加载更多成功
    var loadRefreshSuc = true;//默认下拉刷新加载成功
    var isEmpty = false;//默认是否为空数据页面
    var isNoMore = false;//是否没有更多了
    var emptyMsg = '暂无数据~';//默认的空显示文字

    var loadingHtml = '';

    var refreshHeadHtml =
        "
  • " + "
    下拉立即刷新
    " + "
  • "; var loadMoreHtml = "
    " + loadingHtml + "
    正在加载...
    " + "
    "; var emptyHtml = "
    " + "" + "
    暂无数据~
    " + "
    "; u.slide = function (slide) { slideView = slide; slide.viewObj.on('touchstart', function (e) { var _touch = e.originalEvent.targetTouches[0]; var _y = _touch.pageY; touchStartY = _y; }); slide.viewObj.on('touchmove', function (e) { var _touch = e.originalEvent.targetTouches[0]; var _y = _touch.pageY; touchMoveY = _y; var temp = touchMoveY - touchStartY; scrollTop = slide.viewObj.scrollTop(); // console.log("移动中:" + scrollTop); if (scrollTop == 0 && (touchMoveY - touchStartY) > 10 && !isEmpty) { if (!addHeader) { addHeader = true; slide.viewObj.children('ul').before(refreshHeadHtml); } else { $("#pullHeader").height(temp); if ((touchMoveY - touchStartY) > moveMaxHeight) { $("#pullHeader_tip").text('松手即可刷新'); } else if ((touchMoveY - touchStartY) < (moveMaxHeight - 1)) { $("#pullHeader_tip").text('下拉立即刷新'); } } } }); slide.viewObj.on('touchend', function (e) { var _touch = e.originalEvent.changedTouches[0]; var _y = _touch.pageY; touchEndY = _y; // console.log(touchStartY + "/" + touchEndY) //下拉刷新 if (scrollTop == 0 && !isEmpty) { //如果用户下拉出现了正在刷新 然后又往上推 就不执行刷新 if (touchEndY > touchStartY) { if ((touchEndY - touchStartY) > moveMaxHeight) { if (loadRefreshSuc) { isNoMore = false; $("#pullHeader_tip").text('正在刷新中...'); $("#pullHeader_tip").before(loadingHtml); //刷新的时候如果底部有 就需要删除并重置 if ($("#pullFooter") != null || $("#pullFooter") != undefined) { $("#pullFooter").remove(); addFooter = false; loadMoreSuc = true; } //使用双回调 这里回调给页面开始执行加载更多 页面加载完毕回调到这里 slide.refresh(function () { //回调到这里 刷新完毕 $("#pullHeader").remove(); addHeader = false; loadRefreshSuc = true; // slide.viewObj.removeChild(); }); loadRefreshSuc = false; } } else { $("#pullHeader").remove(); addHeader = false; } } else { $("#pullHeader").remove(); addHeader = false; } } else if (scrollTop >= 0) { $("#pullHeader").remove(); addHeader = false; } }); //上拉加载 slide.viewObj.scroll(function () { if (!isNoMore) { if (!isEmpty) { if (loadMoreSuc) { var scrollTop = $(this).scrollTop();//滚动条的高度,即滚动条的当前位置到div顶部的距离 var scrollHeight = $(this)[0].scrollHeight;//滚动的高度 var wiewHeight = $(this).height();//div可视区域的高度 // console.log(scrollTop + "/" + wiewHeight + "/" + scrollHeight); if (scrollTop + wiewHeight == scrollHeight) { if (!addFooter) { slide.viewObj.children('ul').children('#pullFooter').remove(); slide.viewObj.children('ul').append(loadMoreHtml); addFooter = true; loadMoreSuc = false; } //使用双回调 这里回调给页面开始执行加载更多 页面加载完毕回调到这里 slide.loadMore(function (isEndLoadMore) { //回调结果为true表示没有更多了 并执行回调完毕 if (!isEndLoadMore) { $("#pullFooter").remove(); addFooter = false; setTimeout(function () { loadMoreSuc = true; }, 1000) } else { $("#pullFooter").empty(); $("#pullFooter").text('没有更多了~'); } }); } } } } }); } /** * 设置空 * @param sView 父view * @param emptyTxt 空显示文字 默认显示 * @param emptyImgSrc 空显示图片 默认不显示 */ u.slide.empty = function (sView, emptyTxt, emptyImgSrc) { if (sView != null) { slideView = sView; } //先将li全部隐藏掉 slideView.viewObj.children('ul').children('li').hide(); //如果空显示存在就不在往ul中添加 而是直接更新文字和图片 if (!$('div').hasClass('emptyView')) { slideView.viewObj.children('ul').append(emptyHtml); } //更新文字和图片 if (emptyTxt != null && emptyTxt != '') { $('.emptyDiv').empty().append(emptyTxt); } if (emptyImgSrc != null && emptyImgSrc != '') { $('.emptyImg').show(); $('.emptyImg').attr('src', emptyImgSrc); } isEmpty = true; } //设置不为空的时候 u.slide.noEmpty = function () { $('.emptyView').remove(); slideView.viewObj.children('ul').children('li').show(); } //设置没有更多数据了 u.slide.noMore = function (sView) { isNoMore = true; if (sView != null) { slideView = sView; } slideView.viewObj.children('ul').append(loadMoreHtml); $("#pullFooter").empty(); $("#pullFooter").text('没有更多了~'); } /*end*/ window.$pulltorefresh = u; })(window);

    2.使用pulltorefresh.css

    /*滑动内容框*/
    .slide_content {
        width: 100%;
        height: 100%;
        overflow-y: scroll;
    }
    
    /*下拉刷新loading的样式*/
    .loadEffect {
        width: 20px;
        height: 20px;
        position: relative;
        margin: 0 auto;
        margin-top: 100px;
    }
    
    .pull_loading {
        width: 18px;
        height: 18px;
        -webkit-transition-property: -webkit-transform;
        -webkit-transition-duration: 1s;
        -moz-transition-property: -moz-transform;
        -moz-transition-duration: 1s;
        -webkit-animation: rotate 3s linear infinite;
        -moz-animation: rotate 3s linear infinite;
        -o-animation: rotate 3s linear infinite;
        animation: rotate 3s linear infinite;
    }
    
    @-webkit-keyframes rotate {
        from {
            -webkit-transform: rotate(0deg)
        }
        to {
            -webkit-transform: rotate(360deg)
        }
    }
    
    @-moz-keyframes rotate {
        from {
            -moz-transform: rotate(0deg)
        }
        to {
            -moz-transform: rotate(359deg)
        }
    }
    
    @-o-keyframes rotate {
        from {
            -o-transform: rotate(0deg)
        }
        to {
            -o-transform: rotate(359deg)
        }
    }
    
    @keyframes rotate {
        from {
            transform: rotate(0deg)
        }
        to {
            transform: rotate(359deg)
        }
    }
    

    3.在需要使用的html页面中导入相应的js与css
    例:

    
    
    
    
        交易明细
        
        
        
        
        
        
        
        
        
    
    
    
    
    • {{item.name}}
      ¥{{item.pay_money}}
      {{item.pay_time}}
      {{item.qrcode}}

    你可能感兴趣的:(简易h5下拉刷新插件)