1、首先引用isScroll插件

说明:页面加载时初始化isScroll,然后调用pullDownAction()和pullUpAction(),每次切换tab时,只需要对pullDownAction()和pullUpAction()里面的东西进行修改即可!!!

html:

<div id="moreWrapper" class="moreWrapper">
<div class="news-tab flexbox flexbox-middle">
<div class="tab-item active">公司动态</div>
<div class="tab-item">行业新闻</div>
<div class="tab-item">媒体报道</div>
<div class="tab-item">案例</div>
<div class="tab-item">大咖说</div>
</div>
</div>
<div class="content bg-gray articleCate" id="wrapper">
<div class="wrapper" id="wrapper-scroller">
<div id="pullDown">
<!--<span class="pullDownIcon"></span>-->
<span class="pullDownLabel">下拉刷新...</span>
</div>
<ul class="news-tab-con article_list">
<foreach name="article_slice" item="vo">
<li>
<a class="flexbox flexbox-middle border-bottom-1px" href="">
<div class="flexchild">
<div class="title">{$vo['title']}</div>
<div class="time">{$vo['c_time']}</div>
</div>
<div class="item-img"><img src= "{$vo['img']}"></div>
</a>
</li>
</foreach>
</ul>
<!--上拉加载更多-->
<div id="pullUp" attrVal="">
<!--<span class="pullUpIcon"></span>-->
<span class="pullUpLabel">上拉加载更多...</span>
</div>
</div>
</div>

css关键代码实现wrapper里面滚动

/*上拉加载*/
#wrapper {
position: absolute;
top: .68rem;
left: ;
width: %;
height: auto;
padding: ;
overflow: auto;
}
#wrapper-scroller {
position: absolute;
z-index: ;
/* -webkit-touch-callout: none; */
-webkit-tap-highlight-color: rgba(, , , );
width: %;
padding: ;
}
#wrapper #pullDown, #wrapper #pullUp {
background: #f7f7f7;
height: .92rem;
line-height: .92rem;
font-size: .24rem;
color: #;
text-align: center;
}

js:

    //获取列表的五个参数定义
var type = ,page = , limit = "";
var generatedCount = ; //上拉加载更多次数统计
var myScroll = ''; //主列表的iscroll实例
var countFlag = true; //上拉计数标识,防止还没渲染页面就再次加一
var myScrollFlag = false, oIscrollFlag = false; //标识iscroll有没有实例化成功(实例化过后才能refresh)
var all_width = ;
var len = $(".news-tab .tab-item").length;
for (var i = ; i < len; i++) {
var item_width = $(".news-tab .tab-item").eq(i).outerWidth();
console.log(item_width)
all_width += parseFloat(item_width);
console.log(all_width)
}
$('.news-tab').css('width', all_width + 'px');
var myscroll1 = new iScroll("moreWrapper", {hScroll: true, vScroll: false, hScrollbar: false, vScrollbar: false}); //点击选项卡切换
$("body").on("click", ".news-tab .tab-item", function () {
type = $(this).index()+;
$(".news-tab .tab-item").removeClass("active");
$(this).addClass("active");
$(".article_list").html("");
//将上拉加载次数清0
generatedCount = ;
//切换选项卡的时候将无更多数据的限制去掉
$("#pullUp").attr("attrVal", );
$("#pullUp .pullUpLabel").html("上拉加载更多...");
getOrderByAjax(type,,);
})
//初始化列表数据
getOrderByAjax(,,);
/**
* 获取保单列表的ajax请求
* @param type 咨询类型(公司动态,行业新闻,媒体报道,保险案例,大咖说保险)
* @param page 请求的页数
* @param limit 加载更多的传值(默认0,第一次加载更多为1,以此类推)
*/
function getOrderByAjax(type,page,limit) {
$.ajax({
url: "{:U('ajaxArticleCate')}",
type: 'post',
dataType: 'json',
data: {'type':type,'page':page},
beforeSend: function () { //ajax加载的时候使用loading遮罩层
if (limit > ) return;
$(".loading-box").show();
},
complete: function () {
if (limit > ) return;
$(".loading-box").hide();
},
success: function (res) {
if (res.data.article == ) { //已经没有更多保单数据
// $("#pullup .pullUpLabel").text("无更多数据!");
$("#pullUp").attr("attrVal", ""); //这个值为1的时候说明无更多数据了
setTimeout(function () {
if (myScrollFlag) {
myScroll.refresh();
}
}, )
return;
} if (res.data.article.length < && limit == ) { //如果刚进来就没有10条,则隐藏上拉加载更多
$("#pullUp").hide();
} else {
$("#pullUp").show();
} $("#pullUp").attr("attrVal", ""); //这个值为0表示可以上拉加载更多数据
$("#pullUp .pullUpLabel").html("上拉加载更多..."); var html='';
if(res.data.article && res.data.article.length != ){
var list=res.data.article;
for(var i=;i<res.data.article.length;i++){
html+='<li class="border-bottom-1px"><a class="flexbox flexbox-middle" href={:U("ajaxArticleContent")}?id='+list[i].id+'>'
html+='<div class="flexchild">'
html+='<div class="title">'+list[i].title+'</div>'
html+='<div class="time">'+list[i].c_time+'</div>'
html+='</div>'
html+='<div class="item-img"><img src= "'+list[i].img+'"></div>'
html+='</a></li>';
}
// $(".article_list").append(html);
$(".article_list").append(html);
countFlag = true; $("#myorder-wrapper").show(); /*//如果是第一次加载,默认列表置回顶部
if (limit == 0) {
if (myScrollFlag) {
myScroll.scrollTo(0, 0, 100, false);
}
}*/ setTimeout(function () {
if (myScrollFlag) {
myScroll.refresh();
if (limit == ) {
console.log("")
myScroll.scrollTo(, -, , false);
}
}
}, ); //刷新iscroll
}
}
})
}
</script>
<!--下拉刷新、上拉加载更多相关js-->
<script>
//设置容器高度
$("#wrapper").height($(window).height() - $(".header").height() - $(".news-tab").outerHeight());
/*+ $("#pullDown").outerHeight()*/
var pullDownEl, pullDownOffset,
pullUpEl, pullUpOffset; //下拉加载及刷新
function pullDownAction() {
generatedCount = ; //下拉刷新的时候清空上拉加载更多的次数统计
getOrderByAjax(type,page,);
} //上拉加载及刷新
function pullUpAction() {
var isMore=$("#pullUp").attr("attrVal");
if (countFlag&&isMore!="") {
limit = ++generatedCount;
countFlag = false;
page++;
getOrderByAjax(type,page,limit);
} } function loaded() {
pullDownEl = document.getElementById('pullDown');
pullDownOffset = pullDownEl.offsetHeight;
// console.log(pullDownOffset); pullUpEl = document.getElementById('pullUp');
pullUpOffset = pullUpEl.offsetHeight; myScroll = new iScroll('wrapper', {
hScroll: false,
vScroll: true,
x: ,
y: ,
useTransition: true,
topOffset: pullDownOffset,
onRefresh: function () {
if (pullDownEl.className.match('loading')) {
pullDownEl.className = '';
pullDownEl.querySelector('.pullDownLabel').innerHTML = '下拉刷新...';
} else if (pullUpEl.className.match('loading')) {
pullUpEl.className = '';
if ($("#pullUp").attr("attrVal") == ) {
pullUpEl.querySelector('.pullUpLabel').innerHTML = '无更多数据!';
return;
}
pullUpEl.querySelector('.pullUpLabel').innerHTML = '上拉加载更多...';
}
},
onScrollMove: function () {
if (this.y > && !pullDownEl.className.match('flip')) {
pullDownEl.className = 'flip';
pullDownEl.querySelector('.pullDownLabel').innerHTML = '松开刷新...';
this.minScrollY = ;
} else if (this.y < && pullDownEl.className.match('flip')) {
pullDownEl.className = '';
pullDownEl.querySelector('.pullDownLabel').innerHTML = '下拉刷新...';
this.minScrollY = -pullDownOffset;
} else if (this.y < (this.maxScrollY - ) && !pullUpEl.className.match('flip')) {
if ($("#pullUp").attr("attrVal") == "") return; //无更多数据的时候上拉加载更多直接return
pullUpEl.className = 'flip';
pullUpEl.querySelector('.pullUpLabel').innerHTML = '松开刷新...';
this.maxScrollY = this.maxScrollY;
} else if (this.y > (this.maxScrollY + ) && pullUpEl.className.match('flip')) {
pullUpEl.className = '';
pullUpEl.querySelector('.pullUpLabel').innerHTML = '上拉加载更多...';
this.maxScrollY = pullUpOffset;
}
},
onScrollEnd: function () {
if (pullDownEl.className.match('flip')) {
pullDownEl.className = 'loading';
pullDownEl.querySelector('.pullDownLabel').innerHTML = '加载中...';
pullDownAction(); // Execute custom function (ajax call?)
} else if (pullUpEl.className.match('flip')) {
if ($("#pullUp").attr("attrVal") == "") return; //无更多数据的时候上拉加载更多直接return
pullUpEl.className = 'loading';
pullUpEl.querySelector('.pullUpLabel').innerHTML = '加载中...';
pullUpAction(); // Execute custom function (ajax call?)
}
}
}); //myscroll实例化完之后置为true
myScrollFlag = true; setTimeout(function () {
document.getElementById('wrapper').style.left = '';
}, );
} document.addEventListener('touchmove', function (e) {
e.preventDefault();
}, {passive: false}); document.addEventListener('DOMContentLoaded', function () {
setTimeout(loaded, );
}, false);
</script>

利用iscroll实现上拉加载下拉刷新的更多相关文章

  1. Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记

    之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...

  2. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

  3. RecyclerView 上拉加载下拉刷新

    RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...

  4. APICloud上啦加载下拉刷新模块

    apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...

  5. 微信小程序上拉加载下拉刷新

    微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...

  6. mui scroll和上拉加载/下拉刷新

    mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/*   */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...

  7. zepto.js + iscroll.js上拉加载 下拉加载的 移动端 新闻列表页面

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  8. 学习 | iscroll之上拉加载下拉刷新

    引入文件顺序 1.zepto 2.iscroll.js 3.scroll-probe.js 链接 完整代码:https://github.com/dirkhe1051931999/writeBlog/ ...

  9. SwipeRefreshLayout实现上拉加载下拉刷新

    package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...

随机推荐

  1. 安装FreeIPA以及应用时报错汇总

    安装FreeIPA以及应用时报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ERROR DNS zone yinzhengjie.org.cn already exis ...

  2. 01--STL算法(算法基础)

    一:算法概述 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. <algorithm>是所有STL头文件中 ...

  3. ARM寄存器介绍

    ARM处理器共有37个寄存器.其中包括:31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器.以及6个32位状态寄存器.但目前只使用了其中12位.ARM处理器共有7种不同的处理器模 ...

  4. Jmeter测试报告生成

    Jmeter测试报告生成 本文使用的 Jmeter 版本为 apache-jmeter-3.2 1. 命令行模式将 jtl 文件转成测试图表 注意: 这种方式只适用于jmeter3.0以后的版本 1. ...

  5. Lost connection to MySQL server during query,MySQL设置session,global变量及网络IO与索引

    Navicat导出百万级数据时,报错:2013 - Lost connection to MySQL server during query 网上一番搜索,修改mysql如下几处配置文件即可: sel ...

  6. hihoCoder #1465 : 后缀自动机五·重复旋律8

    http://hihocoder.com/problemset/problem/1465 求S的循环同构串在T中的出现次数 将串S变成SS 枚举SS的每个位置i,求出以i结尾的SS的子串 与 T的最长 ...

  7. Redis学习笔记(二)解析dump.rdb文件工具之redis-rdb-tools

    https://github.com/sripathikrishnan/redis-rdb-tools 我这里使用docker搭建 docker搭建文档 https://rdbtools.com/do ...

  8. 052、overlay如何实现跨主机通信?(2019-03-19 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7305989.html   今天开始学习 overlay 网络跨主机通信的原理   root@host01:~# ufw ...

  9. mvn项目压缩打包

    通常情况下,maven打包结果为jar或war包.如果需要一并打包配置文件等参数,通过resources配置指定需要打包的文件参数,如下示例: <project> ... <!-- ...

  10. docker 系列 - Docker CheatSheet | Docker 配置与实践清单 (转载)

    本文转载自 (https://segmentfault.com/a/1190000016447161), 感谢作者.