122 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								<template>
							 | 
						|||
| 
								 | 
							
									<view class="u-tips" :class="['u-' + type, isShow ? 'u-tip-show' : '']" :style="{
							 | 
						|||
| 
								 | 
							
										top: navbarHeight + 'px',
							 | 
						|||
| 
								 | 
							
										zIndex: uZIndex
							 | 
						|||
| 
								 | 
							
									}">{{ title }}</view>
							 | 
						|||
| 
								 | 
							
								</template>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<script>
							 | 
						|||
| 
								 | 
							
									/**
							 | 
						|||
| 
								 | 
							
									 * topTips 顶部提示
							 | 
						|||
| 
								 | 
							
									 * @description 该组件一般用于页面顶部向下滑出一个提示,尔后自动收起的场景。
							 | 
						|||
| 
								 | 
							
									 * @tutorial https://www.uviewui.com/components/topTips.html
							 | 
						|||
| 
								 | 
							
									 * @property {String Number} navbar-height 导航栏高度(包含状态栏高度在内),单位PX
							 | 
						|||
| 
								 | 
							
									 * @property {String Number} z-index z-index值(默认975)
							 | 
						|||
| 
								 | 
							
									 * @example <u-top-tips ref="uTips"></u-top-tips>
							 | 
						|||
| 
								 | 
							
									 */
							 | 
						|||
| 
								 | 
							
									export default {
							 | 
						|||
| 
								 | 
							
										name: "u-top-tips",
							 | 
						|||
| 
								 | 
							
										props: {
							 | 
						|||
| 
								 | 
							
											// 导航栏高度,用于提示的初始化
							 | 
						|||
| 
								 | 
							
											navbarHeight: {
							 | 
						|||
| 
								 | 
							
												type: [Number, String],
							 | 
						|||
| 
								 | 
							
												// #ifndef H5
							 | 
						|||
| 
								 | 
							
												default: 0,
							 | 
						|||
| 
								 | 
							
												// #endif
							 | 
						|||
| 
								 | 
							
												// #ifdef H5
							 | 
						|||
| 
								 | 
							
												default: 44,
							 | 
						|||
| 
								 | 
							
												// #endif
							 | 
						|||
| 
								 | 
							
											},
							 | 
						|||
| 
								 | 
							
											// z-index值
							 | 
						|||
| 
								 | 
							
											zIndex: {
							 | 
						|||
| 
								 | 
							
												type: [Number, String],
							 | 
						|||
| 
								 | 
							
												default: ''
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										data() {
							 | 
						|||
| 
								 | 
							
											return {
							 | 
						|||
| 
								 | 
							
												timer: null, // 定时器
							 | 
						|||
| 
								 | 
							
												isShow: false, // 是否显示消息组件
							 | 
						|||
| 
								 | 
							
												title: '', // 组件中显示的消息内容
							 | 
						|||
| 
								 | 
							
												type: 'primary', // 消息的类型(颜色不同),primary,success,error,warning,info
							 | 
						|||
| 
								 | 
							
												duration: 2000, // 组件显示的时间,单位为毫秒
							 | 
						|||
| 
								 | 
							
											};
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										computed: {
							 | 
						|||
| 
								 | 
							
											uZIndex() {
							 | 
						|||
| 
								 | 
							
												return this.zIndex ? this.zIndex : this.$u.zIndex.topTips;
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										methods: {
							 | 
						|||
| 
								 | 
							
											show(config = {}) {
							 | 
						|||
| 
								 | 
							
												// 先清除定时器(可能是上一次定义的,需要清除了再开始新的)
							 | 
						|||
| 
								 | 
							
												clearTimeout(this.timer);
							 | 
						|||
| 
								 | 
							
												// 时间,内容,类型主题(type)等参数
							 | 
						|||
| 
								 | 
							
												if (config.duration) this.duration = config.duration;
							 | 
						|||
| 
								 | 
							
												if (config.type) this.type = config.type;
							 | 
						|||
| 
								 | 
							
												this.title = config.title;
							 | 
						|||
| 
								 | 
							
												this.isShow = true;
							 | 
						|||
| 
								 | 
							
												// 倒计时
							 | 
						|||
| 
								 | 
							
												this.timer = setTimeout(() => {
							 | 
						|||
| 
								 | 
							
													this.isShow = false;
							 | 
						|||
| 
								 | 
							
													clearTimeout(this.timer);
							 | 
						|||
| 
								 | 
							
													this.timer = null;
							 | 
						|||
| 
								 | 
							
												}, this.duration);
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									};
							 | 
						|||
| 
								 | 
							
								</script>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<style lang="scss" scoped>
							 | 
						|||
| 
								 | 
							
									@import "../../libs/css/style.components.scss";
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									view {
							 | 
						|||
| 
								 | 
							
										box-sizing: border-box;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									// 顶部弹出类型样式
							 | 
						|||
| 
								 | 
							
									.u-tips {
							 | 
						|||
| 
								 | 
							
										width: 100%;
							 | 
						|||
| 
								 | 
							
										position: fixed;
							 | 
						|||
| 
								 | 
							
										z-index: 1;
							 | 
						|||
| 
								 | 
							
										padding: 20rpx 30rpx;
							 | 
						|||
| 
								 | 
							
										color: #FFFFFF;
							 | 
						|||
| 
								 | 
							
										font-size: 28rpx;
							 | 
						|||
| 
								 | 
							
										left: 0;
							 | 
						|||
| 
								 | 
							
										right: 0;
							 | 
						|||
| 
								 | 
							
										@include vue-flex;
							 | 
						|||
| 
								 | 
							
										align-items: center;
							 | 
						|||
| 
								 | 
							
										justify-content: center;
							 | 
						|||
| 
								 | 
							
										opacity: 0;
							 | 
						|||
| 
								 | 
							
										// 此处为最核心点,translateY(-100%)意味着将其从Y轴隐藏(隐藏到顶部(h5)或者说导航栏(app)下面)
							 | 
						|||
| 
								 | 
							
										transform: translateY(-100%);
							 | 
						|||
| 
								 | 
							
										transition: all 0.35s linear;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-tip-show {
							 | 
						|||
| 
								 | 
							
										transform: translateY(0);
							 | 
						|||
| 
								 | 
							
										opacity: 1;
							 | 
						|||
| 
								 | 
							
										z-index: 99;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-primary {
							 | 
						|||
| 
								 | 
							
										background: $u-type-primary;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-success {
							 | 
						|||
| 
								 | 
							
										background: $u-type-success;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-warning {
							 | 
						|||
| 
								 | 
							
										background: $u-type-warning;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-error {
							 | 
						|||
| 
								 | 
							
										background: $u-type-error;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									.u-info {
							 | 
						|||
| 
								 | 
							
										background: $u-type-info;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								</style>
							 |