基于Swiper的Tab数据刷新和分页加载代码

PS:本文是基于Swiper3的(详情请百度Swiper官网,里面的css和js是swiper3版本,相应的包请到官网下载)



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<@css href="new_mobile/swiper.min.css"/> 
<!-- <link rel="stylesheet" type="text/css" href="css/swiper.min.css"/> -->
<style type="text/css">
html, body{height: 100%;font-family: "微软雅黑";}
*{margin: 0;padding: 0;box-sizing: border-box;}
a {color: #428bca;text-decoration: none;}
a:hover,a:focus {color: #2a6496;text-decoration: underline;}
a:focus {outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px;}

.padd_40{padding-top: 80px;background: #F5F5F5;overflow-x:hidden;}
.a{text-align:center;line-height: 40px;position: fixed;top: 0;left: 0;width: 100%;z-index: 10;border-bottom: 1px #ccc solid; background: #f50;color: #fff;}
.tab{display: flex;line-height: 40px;position: fixed;top: 40px;width: 100%;z-index: 10;border-bottom: 1px #ccc solid;}
.tab a{width: 33.333333%;background: #fff;text-align: center;}
.tab .active{border-bottom: 1px #f50 solid; color: #f50;}
.panel{margin: 0;}

.refreshtip {position: absolute;left: 0;width: 100%;margin: 10px 0;text-align: center;color: #999;}
.swiper-container{overflow: visible;}
.loadtip { display: block;width: 100%;line-height: 40px; height: 40px;text-align: center;color: #999;border-top: 1px solid #ddd;}
.swiper-container, .w{height: calc(100vh - 120px);}
.swiper-slide{height: auto;}

.text-center{text-align: center;}
.list-group{padding-left: 0;margin-bottom: 20px;}
.list-group-item{    position: relative; display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd;}
.list-group-item:first-child {border-top-left-radius: 4px;border-top-right-radius: 4px;}
</style>
</head>
<body class="padd_40">
<div class="a">标题</div>
<div class="tab">
<a class="active" href="javascript:;">进行中</a>
<a href="javascript:;">已完成</a>
<a href="javascript:;">待支付</a>
<a href="javascript:;">已失效</a>
</div>
<div class="swiper-container">
<div class="refreshtip">下拉可以刷新</div>
<div class="swiper-wrapper w">
<div class="swiper-slide d">
<div class="init-loading list-group-item text-center" style="display: none;">下拉可以刷新</div>
<div class="swiper-container2">
<div class="swiper-wrapper">
<div class="swiper-slide list-group">
<!-- <div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div> -->
</div>
<div class="swiper-slide list-group">
<!-- <div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div> -->
</div>
<div class="swiper-slide list-group">
<!-- <div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div> -->
</div>
<div class="swiper-slide list-group">
<!-- <div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div> -->
</div>
</div>
</div>
</div>
</div>

<div class="loadtip">上拉加载更多</div>
<div class="swiper-scrollbar"></div>
</div>
<@js src="new_mobile/jquery-1.9.1.min.js" /> 
<@js src="new_mobile/swiper.min.js" />
<!-- <script src="js/jquery-1.10.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/swiper.min.js" type="text/javascript" charset="utf-8"></script> -->

<script type="text/javascript">
var statusArray = ["PROCESSING","FINISH","UN_BID_PAY","CANCEL_BID"];
var prodLine = ["FINA"];
var currentIndex = 0,currentPage = 1;


var loadFlag = true;
var oi = 0;
var mySwiper = new Swiper('.swiper-container',{
direction: 'vertical',
scrollbar: '.swiper-scrollbar',
slidesPerView: 'auto',
mousewheelControl: true,
freeMode: true,
onInit : function(swiper) {
//Swiper初始化5个tab页面


for (var i = 0; i < statusArray.length; i++) {
initTabData(1, i, true);
}


},
onTouchMove: function(swiper){
//手动滑动中触发
var _viewHeight = document.getElementsByClassName('swiper-wrapper')[0].offsetHeight;
            var _contentHeight = document.getElementsByClassName('swiper-slide')[0].offsetHeight;
            
            //滑动距离超过50(上下滑动)
            if(mySwiper.translate < 50 && mySwiper.translate > 0) {
$(".init-loading").html('下拉刷新...').show();
}else if(mySwiper.translate > 50 ){
$(".init-loading").html('释放刷新...').show();
}
},
onTouchEnd: function(swiper) {
var _viewHeight = document.getElementsByClassName('swiper-wrapper')[0].offsetHeight;
            var _contentHeight = document.getElementsByClassName('swiper-slide')[0].offsetHeight;
             // 上拉加载
            if(mySwiper.translate <= _viewHeight - _contentHeight - 50 && mySwiper.translate < 0) {
                // console.log("已经到达底部!");
               
                if(loadFlag){
                $(".loadtip").html('正在加载...');
                }else{
                $(".loadtip").html('没有更多啦!');
                }
                
                setTimeout(function() {
               
                    /* for(var i = 0; i <5; i++) {
                    oi++;
                        $(".list-group").eq(mySwiper2.activeIndex).append('<li class="list-group-item">我是加载出来的'+oi+'...</li>');
                    } */
                    
                    initTabData(++currentPage,mySwiper2.activeIndex,false);
                    $(".loadtip").html('上拉加载更多...');
                    mySwiper.update(); // 重新计算高度;
                    
                }, 800);
            }
            
            // 下拉刷新
            if(mySwiper.translate >= 50) {
                $(".init-loading").html('正在刷新...').show();
                $(".loadtip").html('上拉加载更多');
                loadFlag = true;
                
                setTimeout(function() {
               
                    $(".refreshtip").show(0);
                    $(".init-loading").html('刷新成功!');
                    //刷新加载数据
                    initTabData(1,mySwiper2.activeIndex,true);
                    
                    setTimeout(function(){
                    $(".init-loading").html('').hide();
                   
                    },800);
                    $(".loadtip").show(0);
                    
                    //刷新操作
                    mySwiper.update(); // 重新计算高度;
                    
                }, 1000);
            }else if(mySwiper.translate >= 0 && mySwiper.translate < 50){
            $(".init-loading").html('').hide();
            }
            return false;
}
});
var mySwiper2 = new Swiper('.swiper-container2',{
onTransitionEnd: function(swiper){

$('.w').css('transform', 'translate3d(0px, 0px, 0px)')
$('.swiper-container2 .swiper-slide-active').css('height','auto').siblings('.swiper-slide').css('height','0px');
mySwiper.update();

$('.tab a').eq(mySwiper2.activeIndex).addClass('active').siblings('a').removeClass('active');
}

});
$('.tab a').click(function(){

$(this).addClass('active').siblings('a').removeClass('active');
mySwiper2.slideTo($(this).index(), 500, false)

$('.w').css('transform', 'translate3d(0px, 0px, 0px)')
$('.swiper-container2 .swiper-slide-active').css('height','auto').siblings('.swiper-slide').css('height','0px');
mySwiper.update();
});


/**tab初始化**/
function initTabData(page,index,isFirst){

//滑动触发加载
var data = {
page : page,
rows: 2,
prodLine : prodLine[0],
status :statusArray[index]
};


//alert(index);
/**渲染加载数据**/
$.ajax({
url : "product_invest_order",
async : true,
type : "post",
data : data,
success : function(result) {

var orderList = result.data.orders;

if(orderList == null || orderList.length == 0)
return ;

var tbBody = "";
$.each(orderList, function (i, each) {
 
          /*  tbBody += "<li><div class='account_top account_center'><div class='top_name'><i>"+"网贷"+"</i>"+each.prodName;
          tbBody += "</div><div class='top_num'>"+each.periodAndRateDesc+"</div>";
          tbBody += "<div class='top_type'>"+each.detailStatusDesc;
          tbBody += "</div></div><div class='account_middle account_center'><div class='middle_price'><span>"+ number_format(each.amount, 2, ".", ",");
          tbBody += "</span>"+each.amountDesc+"</div>";
           
          if(each.waitProfit == undefined){
          each.waitProfit ="0.00";
          //each.waitProfitDesc ="待收收益(元)";
          }
          //进行中
          if(each.orderStatus == "PROCESSING") {
          tbBody += "<div class='middle_sy'><span>"+number_format(each.waitProfit, 2, ".", ",");
          tbBody += "</span>"+each.waitProfitDesc+"</div>";
          }else{
          tbBody += "<div class='middle_sy'><span>"+number_format(each.alreadyProfit, 2, ".", ",");
          tbBody += "</span>"+each.alreadyProfitDesc+"</div>";
          }
           
          tbBody += "<div class='middle_day'><span>"+ each.remaining;
          tbBody += "</span>"+each.remainingDesc;
            tbBody += "</div></div><div class='account_bottom account_center'>";
            
            if(each.prodStartTimeDesc != undefined && each.prodEndTimeDesc != undefined){
            tbBody += "<div class='bottom_time'>"+each.prodStartTimeDesc+" 至 "+each.prodEndTimeDesc+"</div>";
            } 
            
            tbBody += "<div class='bottom_zt'>";
            tbBody += "</div></div>";
            if(each.orderStatus == "FINISH"){
            tbBody += "<div class='account_product_type01'></div>";
            }else if(each.orderStatus == "CANCEL_BID"){
            tbBody += "<div class='account_product_type02'></div>";
            }
            tbBody += "</li>";*/

tbBody += "<div class='list-group-item'>"+each.prodName+"</div>";
            
});

//如果是第一次
if(isFirst){
$(".list-group").eq(index).empty().append(tbBody);
}else{
$(".list-group").eq(index).append(tbBody);
}
console.log(index+"----"+$(".list-group").eq(index).children().length);
},
error : function(xhr, text, err) {
console.log(text);
}
});
}



</script>
</body>
</html>

---------------------------------------------------------------------------------------------------------------------

以上是加了适配部分脚本并请求后台返回数据的,静态页面如下(部分css和js包不同,以接下来这段代码为准)



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link rel="stylesheet" type="text/css" href="css/swiper.min.css"/>
<style type="text/css">
html, body{height: 100%;font-family: "微软雅黑";}
*{margin: 0;padding: 0;box-sizing: border-box;}
a {color: #428bca;text-decoration: none;}
a:hover,a:focus {color: #2a6496;text-decoration: underline;}
a:focus {outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px;}

.padd_40{padding-top: 80px;background: #F5F5F5;overflow-x:hidden;}
.a{text-align:center;line-height: 40px;position: fixed;top: 0;left: 0;width: 100%;z-index: 10;border-bottom: 1px #ccc solid; background: #f50;color: #fff;}
.tab{display: flex;line-height: 40px;position: fixed;top: 40px;width: 100%;z-index: 10;border-bottom: 1px #ccc solid;}
.tab a{width: 33.333333%;background: #fff;text-align: center;}
.tab .active{border-bottom: 1px #f50 solid; color: #f50;}
.panel{margin: 0;}

.refreshtip {position: absolute;left: 0;width: 100%;margin: 10px 0;text-align: center;color: #999;}
.swiper-container{overflow: visible;}
.loadtip { display: block;width: 100%;line-height: 40px; height: 40px;text-align: center;color: #999;border-top: 1px solid #ddd;}
.swiper-container, .w{height: calc(100vh - 120px);}
.swiper-slide{height: auto;}

.text-center{text-align: center;}
.list-group{padding-left: 0;margin-bottom: 20px;}
.list-group-item{    position: relative; display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd;}
.list-group-item:first-child {border-top-left-radius: 4px;border-top-right-radius: 4px;}
</style>
</head>
<body class="padd_40">
<div class="a">标题</div>
<div class="tab">
<a class="active" href="javascript:;">tab1</a>
<a href="javascript:;">tab2</a>
<a href="javascript:;">tab3</a>
</div>
<div class="swiper-container">
<div class="refreshtip">下拉可以刷新</div>
<div class="swiper-wrapper w">
<div class="swiper-slide d">
<div class="init-loading list-group-item text-center" style="display: none;">下拉可以刷新</div>
<div class="swiper-container2">
<div class="swiper-wrapper">
<div class="swiper-slide list-group">
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
</div>
<div class="swiper-slide list-group">
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
</div>
<div class="swiper-slide list-group">
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
<div class="list-group-item">列表</div>
</div>
</div>
</div>
</div>
</div>

<div class="loadtip">上拉加载更多</div>
<div class="swiper-scrollbar"></div>
</div>


<script src="js/jquery-2.1.4.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/swiper.jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var loadFlag = true;
var oi = 0;
var mySwiper = new Swiper('.swiper-container',{
direction: 'vertical',
scrollbar: '.swiper-scrollbar',
slidesPerView: 'auto',
mousewheelControl: true,
freeMode: true,
onTouchMove: function(swiper){//手动滑动中触发
var _viewHeight = document.getElementsByClassName('swiper-wrapper')[0].offsetHeight;
            var _contentHeight = document.getElementsByClassName('swiper-slide')[0].offsetHeight;
            
            
            if(mySwiper.translate < 50 && mySwiper.translate > 0) {
$(".init-loading").html('下拉刷新...').show();
}else if(mySwiper.translate > 50 ){
$(".init-loading").html('释放刷新...').show();
}
},
onTouchEnd: function(swiper) {
var _viewHeight = document.getElementsByClassName('swiper-wrapper')[0].offsetHeight;
            var _contentHeight = document.getElementsByClassName('swiper-slide')[0].offsetHeight;
             // 上拉加载
            if(mySwiper.translate <= _viewHeight - _contentHeight - 50 && mySwiper.translate < 0) {
                // console.log("已经到达底部!");
               
                if(loadFlag){
                $(".loadtip").html('正在加载...');
                }else{
                $(".loadtip").html('没有更多啦!');
                }
                
                setTimeout(function() {
                    for(var i = 0; i <5; i++) {
                    oi++;
                        $(".list-group").eq(mySwiper2.activeIndex).append('<li class="list-group-item">我是加载出来的'+oi+'...</li>');
                    }
                     $(".loadtip").html('上拉加载更多...');
                    mySwiper.update(); // 重新计算高度;
                }, 800);
            }
            
            // 下拉刷新
            if(mySwiper.translate >= 50) {
                $(".init-loading").html('正在刷新...').show();
                $(".loadtip").html('上拉加载更多');
                loadFlag = true;
                
                setTimeout(function() {
                    $(".refreshtip").show(0);
                    $(".init-loading").html('刷新成功!');
                    setTimeout(function(){
                    $(".init-loading").html('').hide();
                    },800);
                    $(".loadtip").show(0);
                    
                    //刷新操作
                    mySwiper.update(); // 重新计算高度;
                }, 1000);
            }else if(mySwiper.translate >= 0 && mySwiper.translate < 50){
            $(".init-loading").html('').hide();
            }
            return false;
}
});
var mySwiper2 = new Swiper('.swiper-container2',{
onTransitionEnd: function(swiper){

$('.w').css('transform', 'translate3d(0px, 0px, 0px)')
$('.swiper-container2 .swiper-slide-active').css('height','auto').siblings('.swiper-slide').css('height','0px');
mySwiper.update();

$('.tab a').eq(mySwiper2.activeIndex).addClass('active').siblings('a').removeClass('active');
}

});
$('.tab a').click(function(){

$(this).addClass('active').siblings('a').removeClass('active');
mySwiper2.slideTo($(this).index(), 500, false)

$('.w').css('transform', 'translate3d(0px, 0px, 0px)')
$('.swiper-container2 .swiper-slide-active').css('height','auto').siblings('.swiper-slide').css('height','0px');
mySwiper.update();
});
</script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Uniapp swiper 组件本身不支持下拉刷新和上滑数据的功能,但可以结合其他组件实现: 1. 可以使用 uniapp 的下拉刷新组件 `uni-pull-down-refresh`,在 swiper 中嵌套该组件,实现下拉刷新的效果。 2. 上滑数据可以使用 `uni-scroll-view` 组件,将 swiper 组件放在 scroll-view 中,当 scroll-view 滑动到底部时,触发数据的操作。 示例代码: ``` <template> <view> <uni-pull-down-refresh @refresh="onRefresh"> <swiper> <swiper-item v-for="(item, index) in list" :key="index"> <view>{{ item }}</view> </swiper-item> </swiper> </uni-pull-down-refresh> <uni-scroll-view class="scroll-view" @scrolltolower="onScrollToLower"> <!-- 更多数据的动画 --> <view v-if="loading">{{ loadingText }}</view> </uni-scroll-view> </view> </template> <script> export default { data() { return { list: [], // 数据列表 loading: false, // 是否正在更多数据 loadingText: '中...', // 数据的提示文本 } }, methods: { // 下拉刷新 onRefresh() { // 获取最新数据 this.getData() }, // 上滑更多数据 onScrollToLower() { if (!this.loading) { // 显示动画 this.loading = true // 更多数据 this.loadMoreData() } }, // 获取最新数据 getData() { // 发送请求,获取最新数据 // ... // 更新数据列表 this.list = newDataList // 关闭下拉刷新 uni.stopPullDownRefresh() }, // 更多数据 loadMoreData() { // 发送请求,获取更多数据 // ... // 将新数据数据列表 this.list.push(...moreDataList) // 隐藏动画 this.loading = false }, }, } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易雪寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值