6 changed files with 624 additions and 8 deletions
			
			
		- 
					282agentApp/components/cu-keyboard/cu-keyboard.vue
 - 
					41agentApp/components/cu-keyboard/exmple.vue
 - 
					279agentApp/components/uni-transition/uni-transition.vue
 - 
					6agentApp/manifest.json
 - 
					1agentApp/pages/allpages/index.vue
 - 
					23agentApp/pages/payment/payment.vue
 
@ -0,0 +1,282 @@ | 
			
		|||||
 | 
				<template> | 
			
		||||
 | 
					<view class="key-container" @click="hide" v-show="showMask"> | 
			
		||||
 | 
						<uni-transition :modeClass="['slide-bottom']" :show="show" | 
			
		||||
 | 
						:styles="{height:'100vh'}" | 
			
		||||
 | 
						 :duration="duration"> | 
			
		||||
 | 
							<view class="key-content" @click.stop> | 
			
		||||
 | 
								<slot></slot> | 
			
		||||
 | 
								<view class="key-box block flex"> | 
			
		||||
 | 
									<view class="key-left"> | 
			
		||||
 | 
										<view class="key-top flex flex-wrap"> | 
			
		||||
 | 
											<view class="btn-box" v-for="(item,index) in numArr" :key="index"> | 
			
		||||
 | 
												<button hover-class="active"  class="cu-btn key-btn text-black text-xl" @click.stop="keydown(item)">{{item}}</button> | 
			
		||||
 | 
											</view> | 
			
		||||
 | 
										</view> | 
			
		||||
 | 
										<view class="key-bottom"> | 
			
		||||
 | 
											<view class="btn-zero"> | 
			
		||||
 | 
												<button hover-class="active" class="cu-btn key-btn text-black text-xl"  @click.stop="keydown('0')">0</button> | 
			
		||||
 | 
											</view> | 
			
		||||
 | 
											<view class="btn-point"> | 
			
		||||
 | 
												<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="keydown('.')">.</button> | 
			
		||||
 | 
											</view> | 
			
		||||
 | 
										</view> | 
			
		||||
 | 
									</view> | 
			
		||||
 | 
									<view class="key-right"> | 
			
		||||
 | 
										<view class="del"> | 
			
		||||
 | 
											<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="del"> | 
			
		||||
 | 
												<text class="zm iconbackspace text-xl"></text> | 
			
		||||
 | 
											</button> | 
			
		||||
 | 
										</view> | 
			
		||||
 | 
										<view class="confirm"> | 
			
		||||
 | 
											<button hover-class="active" :style="[confirmStyle]" class="cu-btn" @click.stop="confirm"> | 
			
		||||
 | 
												<text class="confirm-text">{{confirmText}}</text> | 
			
		||||
 | 
											</button> | 
			
		||||
 | 
										</view> | 
			
		||||
 | 
									</view> | 
			
		||||
 | 
								</view> | 
			
		||||
 | 
							</view> | 
			
		||||
 | 
						</uni-transition> | 
			
		||||
 | 
					</view> | 
			
		||||
 | 
				</template> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<script> | 
			
		||||
 | 
				/** | 
			
		||||
 | 
				 * 付款组件 | 
			
		||||
 | 
				 * @property {Number} duration - 弹出动画时长,默认为300 | 
			
		||||
 | 
				 * @event {Function} change - 数字改变触发,参数为数字 | 
			
		||||
 | 
				 * @event {Function} confirm - 付款时触发,参数为数字 | 
			
		||||
 | 
				 * @event {Function} hide - 关闭键盘触发,参数为空 | 
			
		||||
 | 
				 */ | 
			
		||||
 | 
				// 使用方法,查看同级目录exmple | 
			
		||||
 | 
				import uniTransition from '../uni-transition/uni-transition.vue' | 
			
		||||
 | 
				export default{ | 
			
		||||
 | 
					components:{ | 
			
		||||
 | 
						uniTransition | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					props:{ | 
			
		||||
 | 
						duration:{ | 
			
		||||
 | 
							type:Number,//弹出动画时常 | 
			
		||||
 | 
							default:300 | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						confirmText:{ | 
			
		||||
 | 
							type:String, | 
			
		||||
 | 
							default:'付款' | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						confirmStyle:{ | 
			
		||||
 | 
							type:Object, | 
			
		||||
 | 
							default:()=>{ | 
			
		||||
 | 
								return{ | 
			
		||||
 | 
									backgroundColor:'#57BE6D' | 
			
		||||
 | 
								}  | 
			
		||||
 | 
							} | 
			
		||||
 | 
						} | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					data(){ | 
			
		||||
 | 
						return{ | 
			
		||||
 | 
							value:'',//输出的值 | 
			
		||||
 | 
							show:false,//显示键盘 | 
			
		||||
 | 
							showMask:false,//遮罩层 | 
			
		||||
 | 
							numArr:[1,2,3,4,5,6,7,8,9] | 
			
		||||
 | 
						} | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					 | 
			
		||||
 | 
					watch:{ | 
			
		||||
 | 
						value(newval,oldval){ | 
			
		||||
 | 
							this.$emit("change",newval); | 
			
		||||
 | 
						} | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					methods:{ | 
			
		||||
 | 
						close(){ | 
			
		||||
 | 
							this.show = false; | 
			
		||||
 | 
							setTimeout(()=>{ | 
			
		||||
 | 
								this.showMask = false; | 
			
		||||
 | 
							},this.duration) | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						open(){ | 
			
		||||
 | 
							this.value = ''; | 
			
		||||
 | 
							this.show = true; | 
			
		||||
 | 
							this.showMask = true; | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						del(){ | 
			
		||||
 | 
							if(this.value.length){ | 
			
		||||
 | 
								this.value = this.value.slice(0,this.value.length-1); | 
			
		||||
 | 
							} | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						keydown(e){ | 
			
		||||
 | 
							switch(e){ | 
			
		||||
 | 
								case '.': | 
			
		||||
 | 
								// 当输入为点的时候,如果第一次输入点,则补零 | 
			
		||||
 | 
								if(!this.value.length){ | 
			
		||||
 | 
									this.value = '0.'; | 
			
		||||
 | 
								}else{ | 
			
		||||
 | 
									if(this.value.indexOf('.')>-1){ | 
			
		||||
 | 
										// 如果已经有点,则无效 | 
			
		||||
 | 
									}else{ | 
			
		||||
 | 
										this.value = this.value+''+e; | 
			
		||||
 | 
									} | 
			
		||||
 | 
								} | 
			
		||||
 | 
								break; | 
			
		||||
 | 
								case '0': | 
			
		||||
 | 
								if(this.value.length === 0){ | 
			
		||||
 | 
									this.value = this.value+''+e; | 
			
		||||
 | 
								} | 
			
		||||
 | 
								if(Number(this.value) === 0 && this.value.indexOf('.')== -1){ | 
			
		||||
 | 
									// 当输入为零的时候,如果value转换成数字为零,且没有点则无效 | 
			
		||||
 | 
								}else{ | 
			
		||||
 | 
									this.value = this.value+''+e; | 
			
		||||
 | 
								} | 
			
		||||
 | 
								break; | 
			
		||||
 | 
								default: | 
			
		||||
 | 
								this.value = this.value+''+e; | 
			
		||||
 | 
								break; | 
			
		||||
 | 
							} | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						hide(){ | 
			
		||||
 | 
							this.$emit('hide'); | 
			
		||||
 | 
							this.close(); | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						confirm(){ | 
			
		||||
 | 
							this.$emit('confirm',this.value); | 
			
		||||
 | 
							this.close(); | 
			
		||||
 | 
						} | 
			
		||||
 | 
					} | 
			
		||||
 | 
				} | 
			
		||||
 | 
				</script> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<style lang="scss" scoped> | 
			
		||||
 | 
				@font-face { | 
			
		||||
 | 
				  font-family: 'zm';  /* project id 2442084 */ | 
			
		||||
 | 
				  src: url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.eot'); | 
			
		||||
 | 
				  src: url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.eot?#iefix') format('embedded-opentype'), | 
			
		||||
 | 
				  url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.woff2') format('woff2'), | 
			
		||||
 | 
				  url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.woff') format('woff'), | 
			
		||||
 | 
				  url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.ttf') format('truetype'), | 
			
		||||
 | 
				  url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.svg#zm') format('svg'); | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.zm { | 
			
		||||
 | 
				  font-family: "zm" !important; | 
			
		||||
 | 
				  font-size: 16px; | 
			
		||||
 | 
				  font-style: normal; | 
			
		||||
 | 
				  -webkit-font-smoothing: antialiased; | 
			
		||||
 | 
				  -moz-osx-font-smoothing: grayscale; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.iconbackspace:before { | 
			
		||||
 | 
				  content: "\ef11"; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.flex{ | 
			
		||||
 | 
					display: flex; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.flex-wrap{ | 
			
		||||
 | 
					flex-wrap: wrap; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.cu-btn { | 
			
		||||
 | 
					position: relative; | 
			
		||||
 | 
					border: 0rpx; | 
			
		||||
 | 
					display: inline-flex; | 
			
		||||
 | 
					align-items: center; | 
			
		||||
 | 
					justify-content: center; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
					padding: 0 30rpx; | 
			
		||||
 | 
					font-size: 28rpx; | 
			
		||||
 | 
					height: 64rpx; | 
			
		||||
 | 
					line-height: 1; | 
			
		||||
 | 
					text-align: center; | 
			
		||||
 | 
					text-decoration: none; | 
			
		||||
 | 
					overflow: visible; | 
			
		||||
 | 
					margin-left: initial; | 
			
		||||
 | 
					transform: translate(0rpx, 0rpx); | 
			
		||||
 | 
					margin-right: initial; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.cu-btn::after { | 
			
		||||
 | 
					display: none; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.text-xl{ | 
			
		||||
 | 
					font-size:36rpx; | 
			
		||||
 | 
					font-weight: bold; | 
			
		||||
 | 
					font-family: 'microsoft-yahei'; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.text-black{ | 
			
		||||
 | 
					color:#333; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.active{ | 
			
		||||
 | 
					background-color: #ddd !important; | 
			
		||||
 | 
					transform: translate(2rpx,2rpx); | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.key-container{ | 
			
		||||
 | 
					position: fixed; | 
			
		||||
 | 
					bottom: 0; | 
			
		||||
 | 
					top:0; | 
			
		||||
 | 
					left:0; | 
			
		||||
 | 
					right:0; | 
			
		||||
 | 
					.key-content{ | 
			
		||||
 | 
						position: absolute; | 
			
		||||
 | 
						bottom: 0; | 
			
		||||
 | 
						width: 100vw; | 
			
		||||
 | 
						background-color: #F7F7F7; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.key-box{ | 
			
		||||
 | 
					width: 100%; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
					padding:10rpx 10rpx 0; | 
			
		||||
 | 
					.key-left{ | 
			
		||||
 | 
						width: 75%; | 
			
		||||
 | 
					} | 
			
		||||
 | 
					.key-right{ | 
			
		||||
 | 
						width: 25%; | 
			
		||||
 | 
						display: flex; | 
			
		||||
 | 
						flex-direction: column; | 
			
		||||
 | 
					} | 
			
		||||
 | 
					.key-bottom{ | 
			
		||||
 | 
						width: 100%; | 
			
		||||
 | 
						display: flex; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.del{ | 
			
		||||
 | 
					width: 100%; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.btn-box{ | 
			
		||||
 | 
					width: 33.33%; | 
			
		||||
 | 
					padding:0 10rpx 10rpx 0; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.btn-zero{ | 
			
		||||
 | 
					width: 66.66%; | 
			
		||||
 | 
					padding:0 10rpx 10rpx 0; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.btn-point{ | 
			
		||||
 | 
					width: 33.33%; | 
			
		||||
 | 
					padding:0 10rpx 10rpx 0; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.key-right{ | 
			
		||||
 | 
					flex-shrink: 0; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				.key-btn{ | 
			
		||||
 | 
					background-color: #fff; | 
			
		||||
 | 
					width: 100%; | 
			
		||||
 | 
					height: 90rpx; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.confirm{ | 
			
		||||
 | 
					width: 100%; | 
			
		||||
 | 
					flex:1; | 
			
		||||
 | 
					padding: 10rpx 0 10rpx 0; | 
			
		||||
 | 
					box-sizing: border-box; | 
			
		||||
 | 
					button{ | 
			
		||||
 | 
						width: 100%; | 
			
		||||
 | 
						height: 100%; | 
			
		||||
 | 
						.confirm-text{ | 
			
		||||
 | 
							color:#fff; | 
			
		||||
 | 
							display: block; | 
			
		||||
 | 
							font-size: 32rpx; | 
			
		||||
 | 
						} | 
			
		||||
 | 
					} | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				</style> | 
			
		||||
@ -0,0 +1,41 @@ | 
			
		|||||
 | 
				<template> | 
			
		||||
 | 
					<view class="container"> | 
			
		||||
 | 
						<button type="default" @click="open">打开键盘</button> | 
			
		||||
 | 
						{{value}} | 
			
		||||
 | 
						<cu-keyboard ref="cukeyboard" @change="change" @confirm="confirm" @hide="hide"></cu-keyboard> | 
			
		||||
 | 
					</view> | 
			
		||||
 | 
				</template> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<script> | 
			
		||||
 | 
				export default { | 
			
		||||
 | 
					data() { | 
			
		||||
 | 
						return { | 
			
		||||
 | 
							value:'' | 
			
		||||
 | 
						} | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					mounted() { | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					}, | 
			
		||||
 | 
					methods: { | 
			
		||||
 | 
						change(e){ | 
			
		||||
 | 
							this.value = e; | 
			
		||||
 | 
							console.log("数字改变",e);			 | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						open(){ | 
			
		||||
 | 
							console.log("打开键盘"); | 
			
		||||
 | 
							this.$refs.cukeyboard.open(); | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						confirm(e){ | 
			
		||||
 | 
							console.log("付款",e); | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						hide(){ | 
			
		||||
 | 
							console.log("关闭键盘") | 
			
		||||
 | 
						} | 
			
		||||
 | 
						 | 
			
		||||
 | 
					} | 
			
		||||
 | 
				} | 
			
		||||
 | 
				</script> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<style> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				</style> | 
			
		||||
@ -0,0 +1,279 @@ | 
			
		|||||
 | 
				<template> | 
			
		||||
 | 
					<view v-if="isShow" ref="ani" class="uni-transition" :class="[ani.in]" :style="'transform:' +transform+';'+stylesObject" | 
			
		||||
 | 
					 @click="change"> | 
			
		||||
 | 
						 <slot></slot> | 
			
		||||
 | 
					</view> | 
			
		||||
 | 
				</template> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<script> | 
			
		||||
 | 
					// #ifdef APP-NVUE | 
			
		||||
 | 
					const animation = uni.requireNativePlugin('animation'); | 
			
		||||
 | 
					// #endif | 
			
		||||
 | 
					/** | 
			
		||||
 | 
					 * Transition 过渡动画 | 
			
		||||
 | 
					 * @description 简单过渡动画组件 | 
			
		||||
 | 
					 * @tutorial https://ext.dcloud.net.cn/plugin?id=985 | 
			
		||||
 | 
					 * @property {Boolean} show = [false|true] 控制组件显示或隐藏 | 
			
		||||
 | 
				     * @property {Array} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型 | 
			
		||||
 | 
				     *  @value fade 渐隐渐出过渡 | 
			
		||||
 | 
				     *  @value slide-top 由上至下过渡 | 
			
		||||
 | 
				     *  @value slide-right 由右至左过渡 | 
			
		||||
 | 
				     *  @value slide-bottom 由下至上过渡 | 
			
		||||
 | 
				     *  @value slide-left 由左至右过渡 | 
			
		||||
 | 
				     *  @value zoom-in 由小到大过渡 | 
			
		||||
 | 
				     *  @value zoom-out 由大到小过渡 | 
			
		||||
 | 
					 * @property {Number} duration 过渡动画持续时间 | 
			
		||||
 | 
					 * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red` | 
			
		||||
 | 
					 */ | 
			
		||||
 | 
					export default { | 
			
		||||
 | 
						name: 'uniTransition', | 
			
		||||
 | 
						props: { | 
			
		||||
 | 
							show: { | 
			
		||||
 | 
								type: Boolean, | 
			
		||||
 | 
								default: false | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							modeClass: { | 
			
		||||
 | 
								type: Array, | 
			
		||||
 | 
								default () { | 
			
		||||
 | 
									return [] | 
			
		||||
 | 
								} | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							duration: { | 
			
		||||
 | 
								type: Number, | 
			
		||||
 | 
								default: 300 | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							styles: { | 
			
		||||
 | 
								type: Object, | 
			
		||||
 | 
								default () { | 
			
		||||
 | 
									return {} | 
			
		||||
 | 
								} | 
			
		||||
 | 
							} | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						data() { | 
			
		||||
 | 
							return { | 
			
		||||
 | 
								isShow: false, | 
			
		||||
 | 
								transform: '', | 
			
		||||
 | 
								ani: { in: '', | 
			
		||||
 | 
									active: '' | 
			
		||||
 | 
								} | 
			
		||||
 | 
							}; | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						watch: { | 
			
		||||
 | 
							show: { | 
			
		||||
 | 
								handler(newVal) { | 
			
		||||
 | 
									if (newVal) { | 
			
		||||
 | 
										this.open() | 
			
		||||
 | 
									} else { | 
			
		||||
 | 
										this.close() | 
			
		||||
 | 
									} | 
			
		||||
 | 
								}, | 
			
		||||
 | 
								immediate: true | 
			
		||||
 | 
							} | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						computed: { | 
			
		||||
 | 
							stylesObject() { | 
			
		||||
 | 
								let styles = { | 
			
		||||
 | 
									...this.styles, | 
			
		||||
 | 
									'transition-duration': this.duration / 1000 + 's' | 
			
		||||
 | 
								} | 
			
		||||
 | 
								let transfrom = '' | 
			
		||||
 | 
								for (let i in styles) { | 
			
		||||
 | 
									let line = this.toLine(i) | 
			
		||||
 | 
									transfrom += line + ':' + styles[i] + ';' | 
			
		||||
 | 
								} | 
			
		||||
 | 
								return transfrom | 
			
		||||
 | 
							} | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						created() { | 
			
		||||
 | 
							// this.timer = null | 
			
		||||
 | 
							// this.nextTick = (time = 50) => new Promise(resolve => { | 
			
		||||
 | 
							// 	clearTimeout(this.timer) | 
			
		||||
 | 
							// 	this.timer = setTimeout(resolve, time) | 
			
		||||
 | 
							// 	return this.timer | 
			
		||||
 | 
							// }); | 
			
		||||
 | 
						}, | 
			
		||||
 | 
						methods: { | 
			
		||||
 | 
							change() { | 
			
		||||
 | 
								this.$emit('click', { | 
			
		||||
 | 
									detail: this.isShow | 
			
		||||
 | 
								}) | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							open() { | 
			
		||||
 | 
								clearTimeout(this.timer) | 
			
		||||
 | 
								this.isShow = true | 
			
		||||
 | 
								this.transform = '' | 
			
		||||
 | 
								this.ani.in = '' | 
			
		||||
 | 
								for (let i in this.getTranfrom(false)) { | 
			
		||||
 | 
									if (i === 'opacity') { | 
			
		||||
 | 
										this.ani.in = 'fade-in' | 
			
		||||
 | 
									} else { | 
			
		||||
 | 
										this.transform += `${this.getTranfrom(false)[i]} ` | 
			
		||||
 | 
									} | 
			
		||||
 | 
								} | 
			
		||||
 | 
								this.$nextTick(() => { | 
			
		||||
 | 
									setTimeout(() => { | 
			
		||||
 | 
										this._animation(true) | 
			
		||||
 | 
									}, 50) | 
			
		||||
 | 
								}) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							close(type) { | 
			
		||||
 | 
								clearTimeout(this.timer) | 
			
		||||
 | 
								this._animation(false) | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							_animation(type) { | 
			
		||||
 | 
								let styles = this.getTranfrom(type) | 
			
		||||
 | 
								// #ifdef APP-NVUE | 
			
		||||
 | 
								if(!this.$refs['ani']) return | 
			
		||||
 | 
								animation.transition(this.$refs['ani'].ref, { | 
			
		||||
 | 
									styles, | 
			
		||||
 | 
									duration: this.duration, //ms | 
			
		||||
 | 
									timingFunction: 'ease', | 
			
		||||
 | 
									needLayout: false, | 
			
		||||
 | 
									delay: 0 //ms | 
			
		||||
 | 
								}, () => { | 
			
		||||
 | 
									if (!type) { | 
			
		||||
 | 
										this.isShow = false | 
			
		||||
 | 
									} | 
			
		||||
 | 
									this.$emit('change', { | 
			
		||||
 | 
										detail: this.isShow | 
			
		||||
 | 
									}) | 
			
		||||
 | 
								}) | 
			
		||||
 | 
								// #endif | 
			
		||||
 | 
								// #ifndef APP-NVUE | 
			
		||||
 | 
								this.transform = '' | 
			
		||||
 | 
								for (let i in styles) { | 
			
		||||
 | 
									if (i === 'opacity') { | 
			
		||||
 | 
										this.ani.in = `fade-${type?'out':'in'}` | 
			
		||||
 | 
									} else { | 
			
		||||
 | 
										this.transform += `${styles[i]} ` | 
			
		||||
 | 
									} | 
			
		||||
 | 
								} | 
			
		||||
 | 
								this.timer = setTimeout(() => { | 
			
		||||
 | 
									if (!type) { | 
			
		||||
 | 
										this.isShow = false | 
			
		||||
 | 
									} | 
			
		||||
 | 
									this.$emit('change', { | 
			
		||||
 | 
										detail: this.isShow | 
			
		||||
 | 
									}) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								}, this.duration) | 
			
		||||
 | 
								// #endif | 
			
		||||
 | 
				
 | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							getTranfrom(type) { | 
			
		||||
 | 
								let styles = { | 
			
		||||
 | 
									transform: '' | 
			
		||||
 | 
								} | 
			
		||||
 | 
								this.modeClass.forEach((mode) => { | 
			
		||||
 | 
									switch (mode) { | 
			
		||||
 | 
										case 'fade': | 
			
		||||
 | 
											styles.opacity = type ? 1 : 0 | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'slide-top': | 
			
		||||
 | 
											styles.transform += `translateY(${type?'0':'-100%'}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'slide-right': | 
			
		||||
 | 
											styles.transform += `translateX(${type?'0':'100%'}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'slide-bottom': | 
			
		||||
 | 
											styles.transform += `translateY(${type?'0':'100%'}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'slide-left': | 
			
		||||
 | 
											styles.transform += `translateX(${type?'0':'-100%'}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'zoom-in': | 
			
		||||
 | 
											styles.transform += `scale(${type?1:0.8}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
										case 'zoom-out': | 
			
		||||
 | 
											styles.transform += `scale(${type?1:1.2}) ` | 
			
		||||
 | 
											break; | 
			
		||||
 | 
									} | 
			
		||||
 | 
								}) | 
			
		||||
 | 
								return styles | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							_modeClassArr(type) { | 
			
		||||
 | 
								let mode = this.modeClass | 
			
		||||
 | 
								if (typeof(mode) !== "string") { | 
			
		||||
 | 
									let modestr = '' | 
			
		||||
 | 
									mode.forEach((item) => { | 
			
		||||
 | 
										modestr += (item + '-' + type + ',') | 
			
		||||
 | 
									}) | 
			
		||||
 | 
									return modestr.substr(0, modestr.length - 1) | 
			
		||||
 | 
								} else { | 
			
		||||
 | 
									return mode + '-' + type | 
			
		||||
 | 
								} | 
			
		||||
 | 
							}, | 
			
		||||
 | 
							// getEl(el) { | 
			
		||||
 | 
							// 	console.log(el || el.ref || null); | 
			
		||||
 | 
							// 	return el || el.ref || null | 
			
		||||
 | 
							// }, | 
			
		||||
 | 
							toLine(name) { | 
			
		||||
 | 
								return name.replace(/([A-Z])/g, "-$1").toLowerCase(); | 
			
		||||
 | 
							} | 
			
		||||
 | 
						} | 
			
		||||
 | 
					} | 
			
		||||
 | 
				</script> | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				<style> | 
			
		||||
 | 
					.uni-transition { | 
			
		||||
 | 
						transition-timing-function: ease; | 
			
		||||
 | 
						transition-duration: 0.3s; | 
			
		||||
 | 
						transition-property: transform, opacity; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.fade-in { | 
			
		||||
 | 
						opacity: 0; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.fade-active { | 
			
		||||
 | 
						opacity: 1; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-top-in { | 
			
		||||
 | 
						/* transition-property: transform, opacity; */ | 
			
		||||
 | 
						transform: translateY(-100%); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-top-active { | 
			
		||||
 | 
						transform: translateY(0); | 
			
		||||
 | 
						/* opacity: 1; */ | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-right-in { | 
			
		||||
 | 
						transform: translateX(100%); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-right-active { | 
			
		||||
 | 
						transform: translateX(0); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-bottom-in { | 
			
		||||
 | 
						transform: translateY(100%); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-bottom-active { | 
			
		||||
 | 
						transform: translateY(0); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-left-in { | 
			
		||||
 | 
						transform: translateX(-100%); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.slide-left-active { | 
			
		||||
 | 
						transform: translateX(0); | 
			
		||||
 | 
						opacity: 1; | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.zoom-in-in { | 
			
		||||
 | 
						transform: scale(0.8); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.zoom-out-active { | 
			
		||||
 | 
						transform: scale(1); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
					.zoom-out-in { | 
			
		||||
 | 
						transform: scale(1.2); | 
			
		||||
 | 
					} | 
			
		||||
 | 
				</style> | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue