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 相关文章推荐
跨浏览器开发经验总结(四) 怎么写入剪贴板
May 13 Javascript
js中的string.format函数代码
Aug 11 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
JSON与JS对象的区别与对比
Mar 01 Javascript
Vue中使用vux的配置详解
May 05 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
ajax请求+vue.js渲染+页面加载的示例
Feb 11 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
Json实现传值到后台代码实例
Jun 30 Javascript
jQuery实现计算器功能
Oct 19 jQuery
基于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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
php数组使用规则分析
2015/02/27 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python中join()方法介绍
2018/10/11 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Python持续监听文件变化代码实例
2020/07/22 Python
python3跳出一个循环的实例操作
2020/08/18 Python
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
Ruby如何定义一个类
2012/10/08 面试题
水务局局长岗位职责
2013/11/28 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
服务宗旨标语
2014/07/01 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2014年民政工作总结
2014/11/26 职场文书
六年级情感作文之500字
2019/10/23 职场文书
Python实现位图分割的效果
2021/11/20 Python