当前位置:首页 > VUE

实现vue message

2026-01-13 07:12:19VUE

Vue 消息提示组件实现

基本组件结构

创建一个独立的Message.vue组件,包含模板、样式和逻辑部分。模板部分定义消息框的HTML结构,样式部分控制消息框的外观和动画效果,逻辑部分处理消息的显示和隐藏。

<template>
  <div class="message" v-if="visible">
    <div class="message-content">{{ content }}</div>
  </div>
</template>

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

<style scoped>
.message {
  position: fixed;
  top: 20px;
  left: 50%;
  transform: translateX(-50%);
  padding: 10px 20px;
  background-color: #f0f9eb;
  color: #67c23a;
  border-radius: 4px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  z-index: 9999;
  animation: fadein 0.3s;
}

@keyframes fadein {
  from { opacity: 0; top: 0; }
  to { opacity: 1; top: 20px; }
}
</style>

全局注册与调用

在Vue项目中创建一个插件文件message.js,用于全局注册消息组件并提供调用方法。通过Vue.extend创建组件构造器,动态挂载到DOM中。

实现vue message

import Vue from 'vue'
import MessageComponent from './Message.vue'

const MessageConstructor = Vue.extend(MessageComponent)

const message = function(options) {
  const instance = new MessageConstructor({
    data: typeof options === 'string' ? { content: options } : options
  })

  instance.$mount()
  document.body.appendChild(instance.$el)
  instance.show()

  return instance
}

const types = ['success', 'warning', 'error', 'info']
types.forEach(type => {
  message[type] = options => {
    return message({
      ...(typeof options === 'string' ? { content: options } : options),
      type
    })
  }
})

export default message

样式扩展

根据消息类型添加不同的样式类,增强视觉反馈。在Message.vue的样式中增加不同类型消息的样式定义。

.message.success {
  background-color: #f0f9eb;
  color: #67c23a;
}

.message.warning {
  background-color: #fdf6ec;
  color: #e6a23c;
}

.message.error {
  background-color: #fef0f0;
  color: #f56c6c;
}

.message.info {
  background-color: #f4f4f5;
  color: #909399;
}

动画优化

添加进场和退场动画效果,提升用户体验。修改Message.vue的样式部分,增加退场动画定义。

实现vue message

.message.leaving {
  animation: fadeout 0.3s;
}

@keyframes fadeout {
  from { opacity: 1; top: 20px; }
  to { opacity: 0; top: 0; }
}

组件方法更新

修改Message.vue的show方法,在隐藏时添加退场动画类并延迟移除DOM元素。

show() {
  this.visible = true
  setTimeout(() => {
    this.$el.classList.add('leaving')
    setTimeout(() => {
      this.$el.remove()
    }, 300)
  }, this.duration)
}

多实例管理

在message.js中添加实例管理逻辑,防止多次调用产生重叠问题。维护一个实例数组,自动计算位置偏移。

let instances = []
let seed = 1

const message = function(options) {
  const id = 'message_' + seed++
  const instance = new MessageConstructor({
    data: {
      ...(typeof options === 'string' ? { content: options } : options),
      id
    }
  })

  let verticalOffset = 20
  instances.forEach(item => {
    verticalOffset += item.$el.offsetHeight + 16
  })
  instance.verticalOffset = verticalOffset

  instance.$mount()
  document.body.appendChild(instance.$el)
  instance.visible = true

  instances.push(instance)
  return instance
}

标签: vuemessage
分享给朋友:

相关文章

vue 实现手册

vue 实现手册

以下是关于 Vue.js 实现手册的整理内容,涵盖核心概念、实践方法和常见场景的解决方案: 核心概念与基础用法 Vue.js 是一个渐进式 JavaScript 框架,核心特点包括数据驱动视图和组…

vue前端实现注册

vue前端实现注册

使用 Vue 实现用户注册功能 环境准备 确保已安装 Vue CLI 或通过 CDN 引入 Vue。若使用 Vue CLI,需安装 axios 或其他 HTTP 库用于后端通信。 注册表单组件 创建…

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <tem…

vue卖座网实现

vue卖座网实现

Vue 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue为啥能实现监听

vue为啥能实现监听

Vue 实现监听的原理 Vue 的监听能力主要基于其响应式系统,该系统通过数据劫持和依赖收集实现。当数据变化时,系统能自动触发视图更新或执行回调函数。 核心机制:Object.defineProp…