需求是写一个组件(对话框/提示框)
这个组件的提示内容自定义,其他页面如果使用这个组件的话
可以引用个组件 自定义对于的内容就可以
优点是 不用当每个页面需要这个组件时,重写一遍这个方法
直接可以写一个 多个页面进行使用
对话框
在components里面写入dialog.vue
<template>
<div class="dialog">
<div class="dialog_cover" v-show="dialog"></div>
<transition name="fade">
<div class="dialog_content" v-show="dialog">
<div class="dialog_head">提示</div>
<div class="dialog_main">{{ message }}</div>
<div class="dialog_foot">
<div @click="hide"><span>取消</span></div>
<div @click="hide"><span>确认</span></div>
</div>
</div>
</transition>
</div>
</template>
<script>
export default {
props: {
dialog: {
type: Boolean,
default: false,
},
message: {
type: String,
default: "",
},
},
methods: {
cancel() {
this.$emit("hide", null);
},
},
};
</script>
<style lang="scss" scoped>
.dialog {
font-size: 0.8rem;
width: 100%;
height: 100%;
.dialog_cover {
background: rgba(0, 0, 0, 0.5);
position: fixed;
z-index: 200;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
//放大再还原的回d动画
@keyframes move {
0% {
transform: scale(0);/*初始0看不到*/
}
50% {
transform: scale(1.1);/*放大*/
}
100% {
transform: scale(1);/*还原*/
}
}
.fade-enter-active {
//进入
animation: move 0.5s;
}
.fade-leave-active {
//离开
animation: move 0.5s reverse; //反向播放
}
.dialog_content {
width: 80%;
height: 6rem;
z-index: 300;
background: #fff;
border-radius: 10px;
position: fixed;
top: 50%;
left: 50%;
margin-left: -40%;
margin-top: -3rem;
opacity: 0.9;
text-align: center;
}
.dialog_head {
padding: 0.2rem;
color: black;
font-size: 0.9rem;
font-weight: bold;
}
.dialog_main {
padding-top: 0.5rem;
}
.dialog_foot {
width: 100%;
position: absolute;
bottom: 0;
border-top: 1px solid #ccc;
display: flex;
flex-direction: row;
justify-content: space-around;
text-align: center;
div {
flex: 1;
padding: 0.3rem;
}
div:first-child {
border-right: 1px solid #ccc;
span {
color: blue;
}
}
div:last-child {
span {
color: red;
}
}
}
}
</style>
提示框
在components里面写入toast.vue
<template>
<transition name='toast'>
<div class='toast' v-if='toast'>
<div class='toast_main' >{{message}}</div>
</div>
</transition>
</template>
<script>
export default {
props:{
message:{
type:String,
required: true
},
toast:{
type:Boolean,
default:false
}
}
}
</script>
<style lang="scss">
// 效果一
// .toast-enter-active,.toast-leave-active{
// transition: all 1s;
// }
// .toast-enter, .toast-leave-to{
// opacity: 0;
// transform: translateY(30px)
// }
// 效果二
// .toast-enter-active{
// animation: fade 1s ;
// }
// .toast-leave-active{
// animation: fade 1s reverse;
// }
// @keyframes fade{
// 0%{
// transform:scale(0);
// }
// 50%{
// transform:scale(1.1);
// }
// 100%{
// transform:scale(1);
// }
// }
//效果三
.toast-enter-active{
animation: fade 0.5s ;
}
@keyframes fade{
0%{
transform: translateY(-8px)
}
25%{
transform: translateY(8px)
}
50%{
transform: translateY(-6px)
}
75%{
transform: translateY(6px)
}
100%{
transform: translateY(0px)
}
}
.toast{
position: absolute;
top: 0;
width: 100%;
height: 100%;
text-align: center;
font-size: 0.7rem;
display: flex;
align-items: center;
justify-content: center;
.toast_main{
width: auto;
padding: 0.6rem;
padding-top:0.8rem;
padding-bottom: 0.8rem;
background-color: rgba(37,38,45,.9);
color: #fff;
opacity: 0.9;
}
}
</style>
页面引用
!<template>
<div class="main">
<!-- <Dialog :dialog="dialog" :message="message" @cancel="cancel" @confirm="confirm"></Dialog> -->
<Toast :toast="toast" :message="message"></Toast>
</div>
</template>
<script>
import Dialog from "../../components/dialog.vue";
import Toast from "../../components/toast.vue";
export default {
data() {
return {
dialog: false,//默认显示隐藏type
toast: false,//默认显示隐藏type
message: "",//自定义提示内容
};
},
created(){},
methods:{
cancel(){//取消
this.dialog = false;
},
confirm(){//确定
this.dialog = false;
}
},
components: { Dialog, Toast },
};
</script>
<style>
</style>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)