1. 基础定义和使用
本节目标:
以普通组件的形式封装全局提示组件的基础样式
2.vue提供了内置组件 Transition
它可以在内部元素进行显式和隐藏切换的时候,自动为元素添加动画
<template>
<transition name="down">
<div class="xtx-message" :style="style[type]" v-if="show">
<!-- 上面绑定的是样式 -->
<i class="iconfont" :class="icons[type]"></i>
<!-- 不同提示图标会变 -->
<span class="text">{{ text }}</span>
</div>
</transition>
</template>
<script>
/**
* 功能:
* 1. 根据使用时候的参数传入适配不同的icon / 背景色 (prop)
* 2. 不同的文案 可以设计为插槽 (prop or slot)
* 3. 函数调用的形式 (增加灵活性 不是一上来就跟着父组件来渲染的 而是某个时机下渲染的)
*
* 使用方案:
* <Message type="warn/danger/success" text="登录成功"/>
*
* 过渡优化:
* Transition
* 使用过渡效果的前置条件
* 1. transition内置组件包裹 想要使用过渡效果的元素或者组件
* 2. 内部要应用当前过渡效果的标签或者组件必须要有一个从无到有的状态 v-if/v-show
*/
import { ref } from 'vue'
export default {
name: 'XtxMessage',
props: {
type: {
type: String,
default: 'warn'
},
text: {
type: String,
default: 'this is text'
}
},
setup () {
// 样式集合
const style = {
warn: {
color: '#E6A23C',
backgroundColor: 'rgb(253, 246, 236)',
borderColor: 'rgb(250, 236, 216)'
},
error: {
color: '#F56C6C',
backgroundColor: 'rgb(254, 240, 240)',
borderColor: 'rgb(253, 226, 226)'
},
success: {
color: '#67C23A',
backgroundColor: 'rgb(240, 249, 235)',
borderColor: 'rgb(225, 243, 216)'
}
}
// 图标类名集合
const icons = {
warn: 'icon-warning',
error: 'icon-shanchu',
success: 'icon-queren2'
}
const showRef = ref(false)
// 只是想给过渡有一个状态的切换
setTimeout(() => {
showRef.value = true
}, 0)
return { style, icons, show: showRef }
}
}
</script>
<style scoped lang="less">
.xtx-message {
width: 300px;
height: 50px;
position: fixed;
z-index: 9999;
left: 50%;
margin-left: -150px;
top: 25px;
line-height: 50px;
padding: 0 25px;
border: 1px solid #e4e4e4;
background: #f5f5f5;
color: #999;
border-radius: 4px;
i {
margin-right: 4px;
vertical-align: middle;
}
.text {
vertical-align: middle;
}
}
// 进入dom中的类名
.down-enter-from {
// translate3d 这个属性一般用来做过渡动画效果 会开启浏览器的gpu加速
transform: translate3d(0, -75px, 0);
opacity: 0;
}
// 进入时
.down-enter-active {
transition: all 0.3s;
}
// 进入后
.down-enter-to {
transform: none;
opacity: 1;
}
</style>
2)使用组件
<XtxMessage text="手机号或密码错误" type="error" />