写在前面
页面中会有很多时候需要弹窗提示,我们可以写一个弹窗组件,但是如果每个页面都引入这个组件,太麻烦了,所以我们将它变成全局组件,需要用的时候直接通过js调用即可,不需要在每个页面引入了
效果图
弹窗组件
新建一个弹窗的组件——popup.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
<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文件,写方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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
1
2
3
4
|
// 自定义全局弹窗组件 import vue from 'vue' import popup from './components/dialog/popup' vue.prototype.$popup = popup.install |
组件中使用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
methods: { btnclick () { this .$popup({ imgurl: require( '../../../static/images/shadow.png' ), // 顶部图片 title: '我是标题' , content: '我是内容' , btntext: '我是按钮' , click: () => { // 点击按钮事件 this .$router.push( '……' ) } }) } } |
方便以后自己使用,大家也可以参考哦,也希望大家多多支持服务器之家,谢谢~~
原文链接:https://blog.csdn.net/weixin_43931876/article/details/90600971