| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | 
							- <template>
 
- 	<view 
 
- 	class="gui-sbutton-in" 
 
- 	:class="[
 
- 		baseClass, 
 
- 		status == 1 ? defaultClass : '' ,
 
- 		status == 2 ? loadingClass : '' ,
 
- 		status == 3 ? successClass : '', 
 
- 		status >= 3 ? 'gui-btn-fade-in' : '', 
 
- 		status == 4 ? failClass : ''
 
- 	]">
 
- 		<view 
 
- 		class="gui-sbutton" 
 
- 		v-if="status == 1">
 
- 			<slot name="default"></slot>
 
- 		</view>
 
- 		<view 
 
- 		class="gui-sbutton gui-flex gui-rows gui-nowrap gui-justify-content-center gui-align-items-center" 
 
- 		:class="[baseClass]" 
 
- 		v-if="status == 2">
 
- 			<view 
 
- 			ref="loadingPoints1" 
 
- 			:class="[loaingPointClass, 'gui-sbutton-loading1']"></view>
 
- 			<view 
 
- 			ref="loadingPoints2" 
 
- 			:class="[loaingPointClass, 'gui-sbutton-loading2']"></view>
 
- 			<view 
 
- 			ref="loadingPoints3" 
 
- 			:class="[loaingPointClass, 'gui-sbutton-loading3']"></view>
 
- 		</view>
 
- 		<view 
 
- 		class="gui-sbutton" 
 
- 		v-if="status == 3">
 
- 			<slot name="success"></slot>
 
- 		</view>
 
- 		<view 
 
- 		class="gui-sbutton" 
 
- 		v-if="status == 4">
 
- 			<slot name="error"></slot>
 
- 		</view>
 
- 		<view 
 
- 		class="gui-sbutton gui-sbutton-slot">
 
- 			<slot name="realBtn"></slot>
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- // #ifdef APP-NVUE
 
- const BindingX = uni.requireNativePlugin('bindingx');
 
- // #endif
 
- export default{
 
- 	name    : "gui-submit-button",
 
- 	props   : {
 
- 		titleClass        : {type:String, default : 'gui-sbutton-text'},
 
- 		loaingPointClass  : {type:String, default : 'gui-sbutton-loading-point'},
 
- 		baseClass         : {type:String, default : 'gui-sbutton'},
 
- 		defaultClass      : {type:String, default : 'gui-sbutton-default'},
 
- 		loadingClass      : {type:String, default : 'gui-sbutton-loading'},
 
- 		successClass      : {type:String, default : 'gui-sbutton-success'},
 
- 		failClass         : {type:String, default : 'gui-sbutton-fail'}
 
- 	},
 
- 	data() {
 
- 		return {
 
- 			status         : 1,
 
- 			animateTimer   : 800,
 
- 			BindingXObjs   : [null,null,null],
 
- 			AnimateObjs    : [null,null,null],
 
- 			intervalID     : null
 
- 		}
 
- 	},
 
- 	// #ifdef APP-NVUE
 
- 	watch:{
 
- 		status:function(val){
 
- 			switch(val){
 
- 				case 1 :
 
- 					clearInterval(this.intervalID);
 
- 				break;
 
- 				case 2 :
 
- 					setTimeout(()=>{
 
- 						this.getRefs('loadingPoints1', 0, (refs)=>{
 
- 							this.BindingXObjs = [
 
- 								refs.ref,
 
- 								this.$refs.loadingPoints2.ref,
 
- 								this.$refs.loadingPoints3.ref
 
- 							];
 
- 							this.startAnimate();
 
- 						});
 
- 					}, 100);
 
- 					this.intervalID = setInterval(()=>{
 
- 						this.startAnimate();
 
- 					}, 1000);
 
- 				break;
 
- 				case 3 :
 
- 					clearInterval(this.intervalID);
 
- 				break;
 
- 				case 4 :
 
- 					clearInterval(this.intervalID);
 
- 				break;
 
- 				default : 
 
- 					clearInterval(this.intervalID);
 
- 			}
 
- 		}
 
- 	},
 
- 	// #endif
 
- 	methods : {
 
- 		reset : function () {
 
- 			this.status = 1;
 
- 		},
 
- 		loading : function () {
 
- 			this.status = 2;
 
- 		},
 
- 		success : function () {
 
- 			this.status = 3;
 
- 		},
 
- 		fail : function () {
 
- 			this.status = 4;
 
- 		},
 
- 		// #ifdef APP-NVUE
 
- 		startAnimate   : function(){
 
- 			this.loadingAnimate(0);
 
- 			setTimeout(()=>{this.loadingAnimate(1);},300);
 
- 			setTimeout(()=>{this.loadingAnimate(2);},600);
 
- 		},
 
- 		loadingAnimate : function (id) {
 
- 			this.AnimateObjs[id] = BindingX.bind({
 
- 				eventType      : 'timing',
 
- 				exitExpression : 't>'+this.animateTimer,
 
- 				props          : [
 
- 					{
 
- 						element    : this.BindingXObjs[id], 
 
- 						property   : 'transform.scale',
 
- 						expression : "1+t/"+this.animateTimer+"/3"
 
- 					},
 
- 					{
 
- 						element    : this.BindingXObjs[id], 
 
- 						property   : 'opacity',
 
- 						expression : "0.6+t/"+this.animateTimer
 
- 					}
 
- 				]
 
- 			}, (e)=>{
 
- 				if(e.state === 'exit') {
 
- 					BindingX.unbind({
 
- 						token : this.AnimateObjs[id].token,
 
- 						eventType: 'timing'
 
- 					});
 
- 					this.AnimateObjs[id] = BindingX.bind({
 
- 						eventType      : 'timing',
 
- 						exitExpression : 't>'+this.animateTimer,
 
- 						props          : [
 
- 							{
 
- 								element    : this.BindingXObjs[id], 
 
- 								property   : 'transform.scale',
 
- 								expression : "1.35-t/"+this.animateTimer+"/3"
 
- 							},
 
- 							{
 
- 								element    : this.BindingXObjs[id], 
 
- 								property   : 'opacity',
 
- 								expression : "1.6-t/"+this.animateTimer
 
- 							}
 
- 						]
 
- 					}, (e)=>{
 
- 						if(e.state === 'exit') {
 
- 							BindingX.unbind({
 
- 								token : this.AnimateObjs[id].token,
 
- 								eventType: 'timing'
 
- 							});
 
- 						}
 
- 					});
 
- 				}
 
- 			});
 
- 		},
 
- 		// #endif
 
- 		getRefs        : function(ref, count, fun){
 
- 			if(count >= 30){return null;}
 
- 			var refReturn = this.$refs[ref];
 
- 			if(refReturn){
 
- 				fun(refReturn);
 
- 				return;
 
- 			}else{
 
- 				count++;
 
- 				setTimeout(()=>{
 
- 					this.getRefs(ref, count, fun);
 
- 				}, 50);
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- </script>
 
- <style scoped>
 
- .gui-sbutton-in{position:relative; overflow:hidden;}
 
- .gui-sbutton-slot{opacity:0; position:absolute; left:0; top:0; z-index:1;}
 
- /* #ifndef APP-NVUE */
 
- .gui-sbutton-loading1{animation:gui-sbutton-loading1 1200ms ease-in infinite;}
 
- @keyframes gui-sbutton-loading1{
 
- 	0%{transform: translateY(0px);}
 
- 	25%{transform: translateY(2px);}
 
- 	100%{transform: translateY(0px);}
 
- }
 
- .gui-sbutton-loading2{animation:gui-sbutton-loading2 1200ms ease-in infinite;}
 
- @keyframes gui-sbutton-loading2{
 
- 	0%{transform: translateY(0px);}
 
- 	25%{transform: translateY(0px);}
 
- 	50%{transform: translateY(2px);}
 
- 	75%{transform: translateY(2px);}
 
- 	100%{transform: translateY(0px);}
 
- }
 
- .gui-sbutton-loading3{animation:gui-sbutton-loading3 1200ms ease-in infinite;}
 
- @keyframes gui-sbutton-loading3{
 
- 	0%{transform: translateY(0px);}
 
- 	25%{transform: translateY(0px);}
 
- 	50%{transform: translateY(0px);}
 
- 	75%{transform: translateY(2px);}
 
- 	100%{transform: translateY(0px);}
 
- }
 
- @keyframes gui-btn-fade-in{0%{opacity:0.5;} 100%{opacity:1;}}
 
- .gui-btn-fade-in{animation:gui-btn-fade-in 350ms ease-in forwards;}
 
- /* #endif */
 
- </style>
 
 
  |