当前位置:首页 > VUE

vue实现弹窗代码

2026-01-16 17:36:08VUE

Vue 弹窗实现方法

方法一:使用组件与v-if控制显示

创建一个独立的弹窗组件(如Modal.vue),通过父组件的v-ifv-show控制显隐:

<!-- Modal.vue -->
<template>
  <div class="modal-mask" v-if="visible">
    <div class="modal-container">
      <slot></slot>
      <button @click="$emit('close')">关闭</button>
    </div>
  </div>
</template>

<script>
export default {
  props: ['visible']
}
</script>

<style>
.modal-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}
.modal-container {
  background: white;
  padding: 20px;
  border-radius: 5px;
}
</style>

父组件调用方式:

<template>
  <button @click="showModal = true">打开弹窗</button>
  <Modal :visible="showModal" @close="showModal = false">
    <h3>弹窗内容</h3>
  </Modal>
</template>

<script>
import Modal from './Modal.vue'
export default {
  components: { Modal },
  data() {
    return { showModal: false }
  }
}
</script>

方法二:使用Vue插件形式

创建可编程式调用的弹窗插件:

// modalPlugin.js
const ModalPlugin = {
  install(Vue) {
    Vue.prototype.$modal = {
      show(options) {
        const ComponentClass = Vue.extend(ModalComponent)
        const instance = new ComponentClass({ propsData: options })
        instance.$mount()
        document.body.appendChild(instance.$el)
        return instance
      }
    }
  }
}

const ModalComponent = {
  template: `
    <div class="modal-mask">
      <div class="modal-container">
        <h3>{{ title }}</h3>
        <p>{{ content }}</p>
        <button @click="$emit('close')">关闭</button>
      </div>
    </div>
  `,
  props: ['title', 'content']
}

export default ModalPlugin

在main.js中注册:

vue实现弹窗代码

import ModalPlugin from './modalPlugin'
Vue.use(ModalPlugin)

组件内调用:

this.$modal.show({
  title: '提示',
  content: '操作成功'
})

方法三:使用第三方库

安装流行弹窗库如vue-js-modal

vue实现弹窗代码

npm install vue-js-modal

全局注册:

import VModal from 'vue-js-modal'
Vue.use(VModal)

组件内使用:

<template>
  <button @click="showModal = true">打开</button>
  <modal v-model="showModal" name="example">
    <p>弹窗内容</p>
  </modal>
</template>

<script>
export default {
  data() {
    return { showModal: false }
  }
}
</script>

弹窗最佳实践

  • 添加过渡动画增强用户体验
    
    <transition name="fade">
    <Modal v-if="showModal" />
    </transition>
.fade-enter-active, .fade-leave-active { transition: opacity .3s; } .fade-enter, .fade-leave-to { opacity: 0; } ```
  • 实现点击遮罩层关闭

    <div class="modal-mask" @click.self="$emit('close')">
    <div class="modal-container">...</div>
    </div>
  • 禁止背景滚动

    watch: {
    showModal(val) {
      document.body.style.overflow = val ? 'hidden' : ''
    }
    }

标签: 代码vue
分享给朋友:

相关文章

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现autocomplete

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现 创建…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-ligh…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…