基于uniapp swiper 模仿抖音下拉加载上拉刷新
一、html代码
<!-- 视频上滑示例 -->
<view class="view_back">
<!-- banner内容 -->
<view class="view_cont">
<!-- 轮播 -->
<swiper class="swiper" :duration='300' :vertical='true' @animationfinish="viewChange" @transition='swiper_trans'>
<swiper-item v-for="(item,index) in viewList" :key='index'>
<view class='swiper_box' :style="{background:item.back}">
{{item.name}}
</view>
</swiper-item>
</swiper>
</view>
<view class="view_Refresh" :style="{top:Math.abs(viewDy)+10+'px'}" v-show="viewNum==0&&viewDy<0">
刷新
</view>
</view>二、script代码
// 监听移动
swiper_trans(e) {
this.viewDy = Math.ceil(e.detail.dy)
if (this.changeFlag&&this.viewNum == 0 && e.detail.dy < -150) {
this.changeFlag=false;
this.page = 0
this.getViewData(this.page)
}
},
// 视频切换
viewChange(e) {
this.changeFlag=true;
this.viewNum = e.detail.current
if (this.viewNum + 1 == this.viewList.length) {
this.getViewData(++this.page)
}
},
//获取视频数据
getViewData(page) {
if (page == 0) {
this.viewList = []
}
for (let key = 1; key < 11; key++) {
let viewobj = {};
viewobj.id = 10 * page + key
viewobj.name = `这是视频${10*page+key}`
viewobj.back = this.generateColor()
this.viewList.push(viewobj)
}
},
// 生成不同的颜色
generateColor() {
return 'rgb(' + this.random(0, 255) + ',' + this.random(0, 255) + ',' + this.random(0, 255) + ')'
},
// 生成随机数
random(min, max) {
return Math.ceil(Math.random() * (max - min) + min)
}三、scss代码
.view_back {
width: 100%;
height: 1200rpx;
overflow-y: scroll;
background: #2b2a2a;
position: relative;
.view_cont {
width: 100%;
height: auto;
overflow: hidden;
.swiper {
width: 100%;
height: 1200rpx;
.swiper_box {
width: 100%;
height: 100%;
font-size: 60rpx;
text-align: center;
line-height: 1200rpx;
}
}
}
.view_Refresh {
width: 100rpx;
height: 100rpx;
position: absolute;
background: #fff;
border-radius: 50%;
font-size: 26rpx;
text-align: center;
line-height: 100rpx;
color: #2b2a2a;
top: 0;
left: 300rpx;
}
}四、案例演示

京公网安备 11010502036488号