Vue全局的toast组件
1.创建toast组件
2.创建toast.js文件
3.安装并使用
vue自定义toast组件
使用
总结
Vue全局的toast组件 1.创建toast组件<template>
<div class="toast" v-if="show">
{{ msg }}
</div>
</template>
<style scoped>
.toast{
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border-radius: 3px;
max-width: 200px;
padding: 10px;
background: #333;
color: #fff;
font-size: 14px;
opacity: .9;
text-align: justify;
word-break: break-all;
word-wrap: break-word;
}
</style>
2.创建toast.js文件
import toast from "@/components/toast"
export default (Vue) => {
let toastComp = Vue.extend(toast);
function showToast(msg , duration = 3e3){
let toastDom = new toastComp({
data(){
return{
show:true,
msg
}
}
}).$mount()
document.body.appendChild(toastDom.$el);
setTimeout(() => {
toastDom.show = false
}, duration)
}
Vue.prototype.$toast = showToast;
}
3.安装并使用
import toast from "@/plugins/toast";
Vue.use(toast);
// 组件里面使用
this.$toast("message");
vue自定义toast组件
//toast.js
const TOAST_CLASS = 'toast'
const TOAST_OUT_CLASS = 'toast out'
let innerHtml=""
function toast(msg,time=1000) {
let body=document.querySelector('#app');
if(body.querySelector('.toast')){
body.removeChild(body.querySelector('.toast'))
}
let toastElem = document.createElement('div')
toastElem.setAttribute('class',TOAST_CLASS)
innerHtml = `<sapn>${msg}</sapn>`
toastElem.innerHTML = innerHtml;
body.appendChild(toastElem);
setTimeout(function () {
toastElem.setAttribute('class',TOAST_OUT_CLASS)
},time)
setTimeout(function () {
let elm = body.querySelector('.toast');
if(elm){
body.removeChild(elm)
}
},time+1000)
}
export default toast
//toast.less
@-webkit-keyframes toastIn {
0%{
opacity: 1;
}
50%{
opacity: 1;
}
100%{
opacity: 1;
}
}
@-webkit-keyframes toastOut {
0%{
opacity:1;
}
50%{
opacity:0.7;
}
100%{
opacity:0;
}
}
//animation: name duration timing-function delay iteration-count direction;
.toast{
position: fixed;
z-index:99;
background-color: rgba(0,0,0,0.6);
color:#fff;
padding:15px 25px;
border-radius:5px;
top: 50%;
left:50%;
font-size:18px;
transform: translate(-50% , -50%);
animation-name: toastIn;
animation-duration: 1s;
animation-iteration-count: 1;
animation-delay: 0s;
}
.toast.out {
animation-name: toastOut;
animation-duration: 1s;
animation-iteration-count: 1;
animation-delay: 0s;
animation-fill-mode: forwards;
}
使用
全局注入(main.js),this._toast(‘XXXX’)调用
import toast from "./utils/toast";
window._toast = toast
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。