| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- <template>
 
- 	<!-- #ifdef H5	 -->	
 
- 	<view 
 
- 		class="mix-refresh-content"
 
- 		:style="{
 
- 				transform: 'translateY('+ pageDeviation +'px)',
 
- 				transition: pageTransition + 's',
 
- 				height: 'calc(100% - ' + pageTop + 'px)',
 
- 				maxHeight: 'calc(100% - ' + pageTop + 'px)'
 
- 			}"
 
- 		@touchstart="pageTouchstart"
 
- 		@touchmove="pageTouchmove"
 
- 		@touchend="pageTouchend"
 
- 	>
 
- 	<!-- #endif -->
 
- 	<!-- #ifndef H5	 -->	
 
- 	<view 
 
- 		class="mix-refresh-content"
 
- 		:style="{
 
- 				transform: 'translateY('+ pageDeviation +'px)',
 
- 				transition: pageTransition + 's',
 
- 				height: 'calc(100vh - ' + pageTop + 'px)',
 
- 				maxHeight: 'calc(100vh - ' + pageTop + 'px)'
 
- 			}"
 
- 		@touchstart="pageTouchstart"
 
- 		@touchmove="pageTouchmove"
 
- 		@touchend="pageTouchend"
 
- 	>
 
- 	<!-- #endif -->
 
- 	
 
- 		<!-- 下拉刷新 -->
 
- 		<view class="mix-loading-wrapper">
 
- 			<text class="cuIcon-icloading cu-load loading"></text>
 
- 			<text>既许一人之偏爱,愿尽余生之慷慨</text>
 
- 		</view>
 
- 		<slot></slot>
 
- 	</view>
 
- </template>
 
- <script>
 
- 	let startY, moveY, windowHeight = 500, platform;
 
- 	let timeDiff = 0;
 
- 	let touchending;
 
- 	export default {
 
- 		
 
- 		props: {
 
- 			top: {
 
- 				//距离顶部距离,单位upx
 
- 				type: Number,
 
- 				default: 0
 
- 			},
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				pageDeviation: 0, //下偏移量
 
- 				pageTransition: 0, //回弹过渡时间
 
- 				refreshReady: false, //进入刷新准备状态
 
- 				refreshing: false, // 进入刷新状态
 
- 				loadingText: ['人前显贵,人后受罪']
 
- 			};
 
- 		},
 
- 		computed: {
 
- 			pageTop(){
 
- 				return uni.upx2px(this.top);
 
- 			}
 
- 		},
 
- 		created(){
 
- 			uni.getSystemInfo({
 
- 				success: function(e) {
 
- 					platform = e.platform;
 
- 					windowHeight = e.windowHeight;
 
- 				}
 
- 			})
 
- 		},
 
- 		methods: {
 
- 			pageTouchstart(e){
 
- 				touchending = false;
 
- 				this.pageTransition = 0;
 
- 				startY = e.touches[0].pageY;
 
- 			},
 
- 			pageTouchmove(e){
 
- 				if(touchending){
 
- 					return;
 
- 				}
 
- 				moveY = (e.touches[0].pageY - startY) * 0.4;
 
- 				if(moveY >= 0){
 
- 					this.pageDeviation = moveY;
 
- 					
 
- 					this.$emit('setEnableScroll', false);
 
- 				}
 
- 				if(moveY >= 50 && this.refreshReady === false){
 
- 					this.refreshReady = true;
 
- 				}else if(moveY < 50 && this.refreshReady === true){
 
- 					this.refreshReady = false;
 
- 				}
 
- 				if(platform === 'ios' && e.touches[0].pageY > windowHeight + 10){
 
- 					this.pageTouchend();
 
- 				}
 
- 			},
 
- 			pageTouchend(){
 
- 				touchending = true;
 
- 				if(moveY === 0){
 
- 					return;
 
- 				}
 
- 				this.pageTransition = 0.3;
 
- 				if(moveY >= 50){
 
- 					this.startPulldownRefresh();
 
- 				}else{
 
- 					this.pageDeviation = 0;
 
- 				}
 
- 				
 
- 				if(this.refreshReady === true){
 
- 					this.refreshReady = false;
 
- 				}
 
- 				//修复下拉一点回弹后页面无法滚动的bug
 
- 				this.$emit('setEnableScroll', true);
 
- 				startY = moveY = 0;
 
- 			},
 
- 			//开启下拉刷新
 
- 			startPulldownRefresh(){
 
- 				if(+new Date() - timeDiff < 100){
 
- 					return;
 
- 				}
 
- 				timeDiff = +new Date();
 
- 				this.refreshing = true;
 
- 				this.pageDeviation = uni.upx2px(90);
 
- 				this.$emit('refresh');
 
- 			},
 
- 			//结束下拉刷新
 
- 			endPulldownRefresh(){
 
- 				let that = this
 
- 				setTimeout(function(){
 
- 					that.refreshing = false;
 
- 					that.pageDeviation = uni.upx2px(0);
 
- 				},1200)
 
- 				//this.$emit('setEnableScroll', true);
 
- 			},
 
- 		}
 
- 	}
 
- </script>
 
- <style lang="less" scoped>
 
- 	.mix-refresh-content{
 
- 		display: flex;
 
- 		flex-direction: column;
 
- 		position: relative;
 
- 	}
 
- 	/* 下拉刷新部分 */
 
- 	.mix-loading-wrapper{
 
- 		position: absolute;
 
- 		left: 0;
 
- 		top: 0;
 
- 		transform: translateY(-100%);
 
- 		display: flex;
 
- 		justify-content: center;
 
- 		align-items: center;
 
- 		width: 100%;
 
- 		height: 100rpx;
 
- 		font-size: 24rpx;
 
- 		.cu-load{
 
- 			font-size: 36rpx;
 
- 		}
 
- 	}
 
- 	
 
- 	.mix-loading-icon{
 
- 		width: 70upx;
 
- 		height: 70upx;
 
- 		transition: .3s;
 
- 	}
 
- 	.mix-loading-icon.ready{
 
- 		transform: scaleX(1.3);
 
- 	}
 
- 	.mix-loading-icon.active{
 
- 		animation: loading .5s ease-in infinite both alternate;
 
- 	}
 
- 	
 
- 	@keyframes loading {
 
- 		0% {
 
- 			transform: translateY(-20upx) scaleX(1);
 
- 		}
 
- 		100% {
 
- 			transform: translateY(4upx)  scaleX(1.3);
 
- 		}
 
- 	}
 
- 	
 
- </style>
 
 
  |