| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | <template>	<view>		<view class="grace-reload" ref="guiReload" :style="{backgroundColor:reloadBgColor[reloadStatus], width:width, marginLeft:marginLeft}">			<text class="grace-reload-icon grace-icons" v-if="reloadStatus == 0" :style="{color:reloadColor[reloadStatus]}"></text>			<view ref="loadingIcon" v-if="reloadStatus == 1"><text class="grace-reload-icon grace-icons" :style="{color:reloadColor[reloadStatus]}"></text></view>			<text class="grace-reload-icon grace-icons" v-if="reloadStatus == 2" :style="{color:reloadColor[reloadStatus]}"></text>			<text class="grace-reload-text" :style="{color:reloadColor[reloadStatus]}">{{reloadTxt[reloadStatus]}}</text>		</view>		<!-- view class="grace-reload-shade" @tap.stop="" @touchstart.stop="" @touchmove.stop.prevent="" v-if="reloadStatus != 5"></view -->	</view></template><script>var animation = null;export default{	props:{		reloadTxt    : {			type : Array,			default : function(){				return ['松开手指开始刷新', '数据刷新中', '数据已经刷新']			}		},		reloadBgColor : {			type : Array,			default : function(){				return ['', '', '#63D2BC']			}		},		reloadColor : {			type : Array,			default : function(){				return ['#999999', '#63D2BC', '#FFFFFF']			}		},		width : {			type : String,			default:'750rpx'		},		marginLeft : {			type : String,			default:'0rpx'		}	},	data() {		return {			reloadStatus : 5,			height : 0,			startY : 0,			startTime : 0,			el:null		}	},	watch:{		reloadStatus : function (nval, oval) {			if(nval == 1){				setTimeout(()=>{this.rotate360();}, 300);			}else if(nval == 0){				var el = this.$refs.guiReload;				animation = weex.requireModule('animation');				animation.transition(el, {					styles: {height:'50px', opacity:1},					duration: 200,					timingFunction: 'ease-in',					needLayout:true,					delay: 0				});			}else if(nval == 2){				var el = this.$refs.guiReload;				animation = weex.requireModule('animation');				animation.transition(el, {					styles: {height:'0', opacity:0},					duration: 200,					timingFunction: 'ease-in',					needLayout:true,					delay: 500				});			}		}	},	methods:{		/*		刷新状态 : 		5 无状态可以 进行下拉		0 继续下拉刷新		1 刷新中		2 刷新结束		3 不确认状态但下拉动作已经在执行		*/		touchstart:function (e) {			// 如果滚动条位置不在最顶部禁止刷新			if(e.scrollTop > 0){return ;}			if(this.reloadStatus != 5){return ;}			// 开始准备下拉			this.reloadStatus = 3;			this.startY = e.moveY;			this.startTime = new Date().getTime();		},		touchmove:function (e) {			if(this.reloadStatus == 3){				// 检查时间是否够长				var timer = new Date().getTime() - this.startTime;				if(timer < 200){return ;}				var moveY = e.moveY - this.startY;				if(moveY > 100){					this.reloadStatus = 0;					this.height       = 100;				}			}		},		touchend:function (e) {			switch(this.reloadStatus){				case 0 :					this.reloadStatus = 1; this.$emit('reload');				break;				case 1 :				break;				case 2 :				break;				case 3 :					this.reloadStatus = 5;				break;			}		},		endReload : function(){			this.reloadStatus = 2;			setTimeout(()=>{				this.height = 0;				this.reloadStatus = 5;			},1000)		},		rotate360 : function(){			this.el = this.$refs.loadingIcon;			animation = weex.requireModule('animation');			animation.transition(this.el, {				styles: {transform: 'rotate(7200deg)'},				duration: 20000,				timingFunction: 'linear',				needLayout:false,				delay: 0				}			);		},		stopReload : function () {			this.height = 0;			this.reloadStatus = 5;		}	}}</script><style scoped>.grace-reload{width:750rpx; height:0px; overflow:hidden; flex-direction:row; justify-content:center; align-items:center; opacity:0;}.grace-reload-icon{width:50rpx; height:50rpx; text-align:center; line-height:50rpx; font-size:44rpx;}.grace-reload-text{margin-left:16rpx; line-height:50rpx; font-size:26rpx;}.grace-reload-shade{position:fixed; width:750rpx; flex:1; left:0; top:0; bottom:0; background-color:rgba(255, 255, 255, 0); justify-content:center; align-items:center;}</style>
 |