遇到了一个问题,已经找到原因,但是还没有解决思路,求教大神帮忙看看。。
问题说明:
在首页布局中分为 顶部导航栏+Swiper组件+底部导航栏。。
Swiper组件占用除开顶部导航栏和底部导航栏的所有剩余高度
如果swiper里面没有数据,可以正常使用下拉刷新,但是swiper里面填充满了数据,就不能使用下拉刷新了。。
这时把swiper重新布局,给定一个值,不占用所有的空白空间,这个时候下拉swiper下方的空白处可以监听到下拉刷新事件。
总结:swiper组件所占区域内不能使用下拉刷新。
难点:有什么办法可以在swiper区域内也可以监听到下拉刷新事件?
贴下代码:
<template>
<view>
<view class="uni-tab-bar">
<scroll-view scroll-x class="uni-swiper-tab">
<block v-for="(item,index) in items" :key="index">
<view class="swiper-tab-list" :class="{active : index == itemId}" @tap="tabtab(index)">
{{item.name}}{{item.id}}
</view>
</block>
</scroll-view>
</view>
<view class="uni-tab-bar">
<swiper class="swiper-box" :style="{height:swiperHeight+'px'}" :current="itemId" @change="swiperChange">
<!-- 循环瀑布流布局 -->
<block v-for="(v,k) in imglist" :key="k">
<swiper-item>
<scroll-view scroll-y class="list" @scrolltolower="loadmore(itemId)">
<img-list :items="v.list"></img-list>
<load-more :loadtext="v.loadtext"></load-more>
</scroll-view>
</swiper-item>
</block>
</swiper>
</view>
</view>
</template>
<script>
import imgList from '../../components/img-list.vue'
import loadMore from '../../components/load-more.vue'
export default {
components: {
imgList,
loadMore
},
data() {
return {
imglist: [
{
loadtext : "上拉加载更多",
count:0,
list:[],
},
{
loadtext : "上拉加载更多",
count:0,
list:[]
},
{
loadtext : "上拉加载更多",
count:0,
list:[]
}
],
itemId:'0',//选中的tabbar索引
swiperHeight:0,//滑块区域
items:[//tabbar内容
{
name:'最新',id:'new'
},{
name:'热门',id:'hot'
},{
name:'关注',id:'like'
}
]
}
},
methods: {
//tabbar点击事件
tabtab(id){
this.itemId=id;
},
//滑块滑动事件
swiperChange(e){
this.itemId=e.detail.current;
},
// 上拉加载
loadmore(i){
// var res = this.webapi( 'video/aaa' ,{count:this.imglist[i]['count']});
// console.log(res);
if(this.imglist[i]['loadtext']!=='上拉加载更多' || this.imglist[i]['loadtext']=='没有更多数据了' ){return ;}
this.imglist[i]['loadtext']='加载中.....';//修改状态
uni.request({
url: this.V_apiurl + "video/index",
header:{
'Content-type':'application/x-www-form-urlencoded'
},
data: {
count:this.imglist[i].count,
},
method:'POST',
success: (res) => {
this.imglist[i].loadtext='上拉加载更多';//关闭加载状态
if(res.data.length<1){
this.imglist[i].loadtext='没有更多数据了';//没有更多数据了
return;
}
this.imglist[i].count+=res.data.length;
res.data.forEach(v=>{
this.imglist[i].list.push(v);
});
console.log(res);
}
});
},
//下拉刷新
getnew(i){
uni.request({
url:this.V_apiurl+"video/index",
header:{'Content-type':'application/x-www-form-urlencoded'},
data: {
'isnew':1, //是否刷新
'index':i,//当前索引
},
method:'POST',
success: (res) => {
this.imglist[i].count=res.data.length;
this.imglist[i].list=res.data;
this.imglist[i].loadtext="上拉加载更多";
}
}),
uni.stopPullDownRefresh()//关闭下拉刷新
}
},
onLoad() {
//获取滑块区域高度
uni.getSystemInfo({
success: (res) => {
let height=res.windowHeight-uni.upx2px(100);
this.swiperHeight=height;
}
});
this.loadmore(0);//开启默认加载
},
onPullDownRefresh() {
console.log('fff');
this.getnew(this.itemId);
}
}
</script>
<style>
.swiper-tab-list{
color: #969696;
font-weight: bold;
width: 33%;
}
.uni-tab-bar .active{
color: #09BB07;
}
</style>
coderLsk
用页面滚动只能往下翻,就回不去了,因为只要手指往下滑就会触发下拉刷新。。。
2021-11-17 10:12