Vue实现全局的toast组件方式

 更新时间:2023年03月04日 14:01:23   作者:大晒啦  
这篇文章主要介绍了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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue+canvas如何实现根据数据展示不同高度,不同渐变颜色的长方体效果

    vue+canvas如何实现根据数据展示不同高度,不同渐变颜色的长方体效果

    这篇文章主要介绍了vue+canvas如何实现根据数据展示不同高度,不同渐变颜色的长方体效果,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • vue使用neovis操作neo4j图形数据库及优缺点

    vue使用neovis操作neo4j图形数据库及优缺点

    这篇文章主要介绍了vue使用neovis操作neo4j图形数据库,本文给大家介绍了与常规做法的优缺点对比及使用技巧,对vue neo4j图形数据库相关知识感兴趣的朋友一起看看吧
    2022-02-02
  • Vue实现双向绑定的原理以及响应式数据的方法

    Vue实现双向绑定的原理以及响应式数据的方法

    这篇文章主要介绍了Vue实现双向绑定的原理以及响应式数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 基于Vue.js 实现简易拖拽指令

    基于Vue.js 实现简易拖拽指令

    在 Vue.js 中,我们可以通过自定义指令的方式来实现拖拽功能,使得代码更加模块化和可复用,本文将介绍如何基于 Vue.js 实现一个简易的拖拽指令,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 利用vue.js插入dom节点的方法

    利用vue.js插入dom节点的方法

    这篇文章主要介绍了利用vue.js插入dom节点的相关资料,文中介绍的非常,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • vue源码解读子节点优化更新

    vue源码解读子节点优化更新

    这篇文章主要为大家介绍了vue源码解读子节点优化更新示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Vue.js中用v-bind绑定class的注意事项

    Vue.js中用v-bind绑定class的注意事项

    关于数据绑定一个常见需求就是操作元素的class列表和它的内联样式。因为它们都是属性,我们可以用 v-bind 处理它们,但是使用v-bind绑定class的时候我们要有一些注意事项,下面这篇文章就给大家分享了下要注意的方面,希望能对大家有所帮助,下面来一起看看吧。
    2016-12-12
  • 使用vue-infinite-scroll实现无限滚动效果

    使用vue-infinite-scroll实现无限滚动效果

    vue-infinite-scroll插件可以无限滚动实现加载更多,其作用是是当滚动条滚动到距离底部的指定高度时触发某个方法。这篇文章主要介绍了用vue-infinite-scroll实现无限滚动效果,需要的朋友可以参考下
    2018-06-06
  • vue实现单一筛选、删除筛选条件

    vue实现单一筛选、删除筛选条件

    这篇文章主要为大家详细介绍了vue实现单一筛选、删除筛选条件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Vue父子组件属性传递实现方法详解

    Vue父子组件属性传递实现方法详解

    这篇文章主要介绍了Vue父子组件属性传递实现方法,我们主要从案例出发,用Vue3的写法写父子组件之间的属性传递,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02

最新评论