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>
|