Vue自定义全局弹窗组件操作


Posted in Javascript onAugust 11, 2020

写在前面

页面中会有很多时候需要弹窗提示,我们可以写一个弹窗组件,但是如果每个页面都引入这个组件,太麻烦了,所以我们将它变成全局组件,需要用的时候直接通过JS调用即可,不需要在每个页面引入了

效果图

Vue自定义全局弹窗组件操作

弹窗组件

新建一个弹窗的组件——popup.vue

<template>
 <transition name='fade'>
  <!-- 蒙版 -->
  <div class="mask" v-if="show" @touchmove.prevent>
   <div class="window">
    <img class="shadow" :src="imgUrl" alt="">
    <h1>{{title}}</h1>
    <p>{{content}}</p>
    <button @click="btnClick">{{btnText}}</button>
   </div>
   <img @click="show = false" v-fb class="close" src="../../../pages/signin/dialog/images/关闭.png" alt="">
  </div>
 </transition>
</template>

<script>
export default {
 name: 'app',
 data () {
  return {
   show: false,
   imgUrl: '',
   title: '',
   content: '',
   btnText: '',
   click: ''
  }
 },
 created () {
 },
 methods: {
  btnClick () {
   this.click()
   this.show = false
  }
 }
}
</script>

<style lang="less" scoped>
 @import "../../../assets/css/minx/minx";
 @import "../../../assets/css/pixel/pixel";
 // 渐变过渡
 .fade-enter,
 .fade-leave-active {
  opacity: 0;
 }
 .fade-enter-active,
 .fade-leave-active {
  transition: opacity .35s;
 }
 // 全局弹窗
 .mask {
  .fixed;
  z-index: 10;
  background:rgba(0,0,0,0.65);
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
   padding: 75/75rem;
  .window{
   height: 400/75rem;
   width: 100%;
   background: #fff;
   border-radius:8px;
   text-align: center;
   .shadow{
    width: 270/75rem;
    margin-top: -90/75rem;
   }
   h1{
    margin-top: 32/75rem;
    font-size:32/75rem;
    color:#f1300b;
    line-height:32/75rem;
    font-weight: 600;
   }
   p{
    margin-top: 32/75rem;
    font-size:28/75rem;
    color:#222222;
    line-height:40/75rem;
   }
   button{
    margin-top: 34/75rem;
    background:#f95644;
    border-radius:10px;
    width:23/75remx;
    height:64/75rem;
    font-size:28/75rem;
    color:#ffffff;
   }
  }
  .close{
   width:60/75rem;
   height:60/75rem;
   margin-top: 40/75rem;
  }
 }
</style>

popup.js文件

新建一个popup.js文件,写方法

import Vue from 'vue'
import Popup from './popup.vue'
const PopupBox = Vue.extend(Popup)

Popup.install = function (data) {
 let instance = new PopupBox({
  data
 }).$mount()

 document.body.appendChild(instance.$el)

 Vue.nextTick(() => {
  instance.show = true
  // show 和弹窗组件里的show对应,用于控制显隐
 })
}
export default Popup

main.js引入popup.js

// 自定义全局弹窗组件
import Vue from 'vue'
import Popup from './components/dialog/popup'
Vue.prototype.$popup = Popup.install

组件中使用方法

methods: {
 btnClick () {
  this.$popup({
   imgUrl: require('../../../static/images/shadow.png'), // 顶部图片
   title: '我是标题',
   content: '我是内容',
   btnText: '我是按钮',
   click: () => {
    // 点击按钮事件
    this.$router.push('……')
   }
  })
 }
}

方便以后自己使用,大家也可以参考哦,也希望大家多多支持三水点靠木,谢谢~~

Javascript 相关文章推荐
html下载本地
Jun 19 Javascript
js no-repeat写法 背景不重复
Mar 18 Javascript
node.js中的http.response.removeHeader方法使用说明
Dec 14 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
Mar 03 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
Jun 17 Javascript
将JSON字符串转换成Map对象的方法
Nov 30 Javascript
原生js实现放大镜效果
Jan 11 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
vue使用showdown并实现代码区域高亮的示例代码
Oct 17 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
Aug 05 Javascript
基于Vue全局组件与局部组件的区别说明
Aug 11 #Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 #Javascript
vue实现图片按比例缩放问题操作
Aug 11 #Javascript
JavaScript中while循环的基础使用教程
Aug 11 #Javascript
vue-cli3 引入 font-awesome的操作
Aug 11 #Javascript
js实现列表按字母排序
Aug 11 #Javascript
Vue使用轮询定时发送请求代码
Aug 10 #Javascript
You might like
谈谈PHP语法(5)
2006/10/09 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
浅析vue数据绑定
2017/01/17 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
js运算符的一些特殊用法
2018/07/29 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python定时关机小脚本
2018/06/20 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
win10安装python3.6的常见问题
2020/07/01 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
巾帼文明岗汇报材料
2014/12/24 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫