| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 
							- <template>
 
- 	<view class="grace-shade" 
 
- 	:style="{zIndex:zIndex, background:background, height:shadeShow?'100%':'0px'}" 
 
- 	@tap.stop="closeShade" @touchmove.stop.prevent="">
 
- 		<view :class="[showInReal ? 'grace-shade-in' : 'grace-shade-out']"><slot></slot></view>
 
- 	</view>
 
- </template>
 
- <script>
 
- export default{
 
- 	props:{
 
- 		background : {type:String, default:"rgba(0, 0, 0, 0.1)"},
 
- 		zIndex : {type:Number, default:1},
 
- 		show : {type:Boolean, default:false}
 
- 	},
 
- 	data() {
 
- 		return {
 
- 			shadeShow : false,
 
- 			showInReal : false
 
- 		}
 
- 	},
 
- 	created:function(){
 
- 		if(this.show){ this.showIt(); }else{ this.hideIt();}
 
- 	},
 
- 	watch:{
 
- 		show:function(val){
 
- 			if(val){ this.showIt(); }else{ this.hideIt(); }
 
- 		}
 
- 	},
 
- 	methods:{
 
- 		closeShade : function(){
 
- 			this.$emit('closeShade');
 
- 		},
 
- 		showIt : function(){
 
- 			this.shadeShow = true;
 
- 			setTimeout(()=>{
 
- 				this.showInReal = true;
 
- 			}, 50);
 
- 		},
 
- 		hideIt : function(){
 
- 			this.showInReal = false;
 
- 			setTimeout(()=>{
 
- 				this.shadeShow = false;
 
- 			}, 150);
 
- 		}
 
- 	}
 
- }
 
- </script>
 
- <style scoped>
 
- .grace-shade{position:fixed; width:100%; height:100%; left:0; top:0; bottom:0; overflow:hidden; display:flex; justify-content:center; align-items:center;}
 
- .grace-shade-in{animation:grace-shade-in-a 150ms ease-in forwards;}
 
- @keyframes grace-shade-in-a{0%{transform: scale(0.1); opacity:0;} 100%{transform: scale(1); opacity:1;}}
 
- .grace-shade-out{animation:grace-shade-out-a 150ms ease-out forwards;}
 
- @keyframes grace-shade-out-a{0%{transform: scale(1); opacity:1;} 100%{transform: scale(0.1); opacity:0;}}
 
- </style>
 
 
  |