| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | <template name="gracePopupMenu">	<view>		<view class="grace-popup-mask" @tap.stop="hideMenu" @touchmove.stop.prevent="" 		:style="{background:background, zIndex:zIndex, top:showIn?'0px':'-3000px'}"></view>		<view class="grace-popup-menu" 		:class="[showIn?'grace-shade-in':'grace-shade-out']"		:style="{top:top+'px', width:menuWidth, zIndex:zIndex+1, height:showIn?'':'0rpx'}">			<view :class="['grace-rows', 'arrow-d-'+arrowDirection]" v-if="isArrow">				<view class="arrow-up" :style="{borderBottomColor:bgColor, margin:arrowMargin}"></view>			</view>			<view :style="{background:bgColor, width:menuWidth, borderRadius:borderRadius}"><slot></slot></view>		</view>	</view></template><script>export default {	name: "gracePopupMenu",	props: {		show:{			type : Boolean,			default : false		},		top:{			type : Number,			default : 0		},		bgColor:{			type : String,			default :'#FFFFFF'		},		menuWidth :{			type : String,			default : '258rpx'		},		background : {			type : String,			default : 'rgba(0,0,0, 0.3)'		},		borderRadius:{			type : String,			default:'0rpx'		},		zIndex : {type:Number, default:3},		isArrow:{type:Boolean, default:true},		arrowDirection:{type:String, default:"right"},		arrowMargin:{type:String, default:"0 12rpx"}	},	data() {		return {			showIn : false		}	},	created:function(){		if(this.show){this.open();}else{this.hide();}	},	watch:{		show : function(val,oval){			this.showIn = val;		}	},	methods: {		hideMenu : function() {			this.$emit('hideMenu');		},		open : function(){			this.showIn = true;		},		hide:function(){			this.showIn = false;		}	}}</script><style scoped>.grace-popup-menu{width:258rpx; padding:10rpx; right:0px; overflow:hidden; top:0px; position:absolute; z-index:3; opacity:0;}.grace-popup-mask{background:rgba(0,0,0, 0.3); width:100%; height:100%; position:fixed; left:0; top:-3000px; z-index:4;}.arrow-up{width:0; height:0; border-left:18rpx solid transparent; border-right:18rpx solid transparent; border-bottom:18rpx solid #FFFFFF;}.arrow-d-right{justify-content:flex-end;}.arrow-d-center{justify-content:center;}.arrow-d-left{justify-content:flex-start;}.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%{opacity:1; height:'';} 100%{ opacity:0; height:0;}}</style>
 |