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 相关文章推荐
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
3种不同的ContextMenu右键菜单实现代码
Nov 03 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
原生js实现放大镜特效
Mar 08 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
webpack多页面开发实践
Dec 18 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
解决vue cli使用typescript后打包巨慢的问题
Sep 30 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
对laravel in 查询的使用方法详解
2019/10/09 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
Python的时间模块datetime详解
2017/04/17 Python
Python实现随机选择元素功能
2017/09/14 Python
python用户管理系统
2018/03/13 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
行政监察建议书
2014/05/19 职场文书
李敖北大演讲稿
2014/05/24 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
新教师个人工作总结
2015/02/06 职场文书
电力安全学习心得体会
2016/01/18 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
SQL Server Agent 服务无法启动
2022/04/20 SQL Server