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