当前位置:首页 > VUE

vue 实现toast

2026-03-27 07:51:15VUE

实现 Vue Toast 的几种方法

使用第三方库(推荐)

vue-toastification 是一个流行的 Vue Toast 库,安装简单且功能丰富。

安装:

npm install vue-toastification@next

在 main.js 中引入:

import Toast from "vue-toastification"
import "vue-toastification/dist/index.css"

const app = createApp(App)
app.use(Toast)

使用示例:

this.$toast("Hello world!")
this.$toast.success("Success!")
this.$toast.error("Error occurred")

自定义组件实现

创建一个 Toast 组件 Toast.vue:

<template>
  <div v-if="show" class="toast">
    {{ message }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: false,
      message: ''
    }
  },
  methods: {
    display(message, duration = 3000) {
      this.message = message
      this.show = true
      setTimeout(() => {
        this.show = false
      }, duration)
    }
  }
}
</script>

<style>
.toast {
  position: fixed;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  padding: 12px 24px;
  background: rgba(0,0,0,0.7);
  color: white;
  border-radius: 4px;
  z-index: 9999;
}
</style>

在 main.js 中全局注册:

import Toast from '@/components/Toast'

const app = createApp(App)
app.component('Toast', Toast)

使用方式:

this.$refs.toast.display('Hello world')

使用 Vue 插件方式

创建 toast.js 插件:

export default {
  install(app) {
    app.config.globalProperties.$toast = {
      show(message, duration = 3000) {
        const toast = document.createElement('div')
        toast.className = 'toast-message'
        toast.textContent = message
        document.body.appendChild(toast)

        setTimeout(() => {
          document.body.removeChild(toast)
        }, duration)
      }
    }
  }
}

在 main.js 中引入:

import toast from './plugins/toast'

const app = createApp(App)
app.use(toast)

使用方式:

this.$toast.show('This is a toast message')

样式补充

对于自定义实现,添加 CSS:

vue 实现toast

.toast-message {
  position: fixed;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  padding: 12px 24px;
  background: rgba(0,0,0,0.8);
  color: white;
  border-radius: 4px;
  z-index: 9999;
  animation: fadeIn 0.3s, fadeOut 0.3s 2.7s;
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

每种方法各有优劣,第三方库功能最全但增加包体积,自定义实现更轻量但需要自行处理更多细节。根据项目需求选择合适方案。

标签: vuetoast
分享给朋友:

相关文章

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue实现webshell

vue实现webshell

Vue 实现 WebShell 使用 Vue 实现 WebShell 需要结合前端与后端的交互,通常通过 WebSocket 或 HTTP 协议与服务器通信。以下是一个基于 Vue 和 WebSock…

vue实现双击

vue实现双击

Vue 实现双击事件的方法 在Vue中实现双击事件可以通过以下几种方式完成,具体选择取决于项目需求和开发习惯。 使用 @dblclick 指令 Vue提供了内置的@dblclick指令,可以直接在模…

vue日历实现

vue日历实现

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构。一个典型的日历包含星期标题和日期格子,可以通过v-for循环生成。月份切换功能通过计算属性动态更新日期数组。 <templat…

vue实现图片循环

vue实现图片循环

实现图片循环的基本方法 在Vue中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-fo…

vue实现无限循环

vue实现无限循环

Vue实现无限循环的方法 在Vue中实现无限循环可以通过多种方式完成,以下是几种常见的方法: 使用CSS动画 通过CSS的animation属性结合@keyframes可以实现无限循环动画效果。…