vue封装全局确认弹窗
下载文件1、弹窗组件
<template>
<view class="bombFrame" v-if="bshow" :class="show?'show':'hide'">
<view class="telate" :class="show?'bshow':'bhide'">
<view class="hint">
<view>{{title}}</view>
<view @touchstart.prevent="noClick">
<image src="./static/cha.svg" mode="" />
</view>
</view>
<view class="promptContent">
<view>
<image src="./static/gantan.svg" mode="" />
</view>
<view>{{content}}</view>
</view>
<view class="operate">
<view @touchstart.prevent="noClick">{{noBtnText}}</view>
<view @touchstart.prevent="yesClick">{{yesBtnText}}</view>
</view>
</view>
</view>
</template>
<script>
/**
*
*
* this.$Message({ content: "模式未保存,确定离开?" })
.then(() => {
console.log("yes");
})
.catch(() => {
console.log("cancel");
});
*
*
*/
export default {
props: {
title: {
type: String,
default: "提示",
},
yesBtnText: {
type: String,
default: "确定",
},
noBtnText: {
type: String,
default: "取消",
},
hasMark: {
type: Boolean,
default: true,
},
content: {
type: String,
default: "此操作将永久删除该文件, 是否继续?",
},
},
data() {
return {
promiseStatus: null,
show: false,
bshow: false,
};
},
methods: {
messag() {
let _this = this;
this.show = true;
this.bshow = true;
return new Promise(function (resolve, reject) {
_this.promiseStatus = { resolve, reject };
});
},
noClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.reject();
},
yesClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.resolve();
},
alertClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.resolve();
},
},
};
</script>
<style lang='scss'>
@keyframes move {
0% {
background: rgba(0, 0, 0, 0.5);
opacity: 1;
}
50% {
background: rgba(0, 0, 0, 0.2);
}
100% {
background: rgba(0, 0, 0, 0);
opacity: 0;
}
}
@keyframes move2 {
0% {
background: rgba(0, 0, 0, 0);
opacity: 0;
}
50% {
background: rgba(0, 0, 0, 0.2);
}
100% {
background: rgba(0, 0, 0, 0.5);
opacity: 1;
}
}
@keyframes move4 {
0% {
background: rgba(255, 255, 255, 1);
transform: translateY(0);
}
50% {
background: rgba(255, 255, 255, 0.5);
}
100% {
background: rgba(255, 255, 255, 0);
transform: translateY(-50rpx);
display: none !important;
}
}
@keyframes move3 {
0% {
background: rgba(255, 255, 255, 1);
transform: translateY(-50rpx);
}
100% {
background: rgba(255, 255, 255, 1);
transform: translateY(0);
}
}
.show {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move2 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.hide {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.bshow {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move3 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards;
}
.bhide {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move1 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.bombFrame {
position: fixed;
z-index: 9900;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0px 2px 9px 3px rgba(0, 0, 0, 0.5);
.telate {
background-color: #fff;
border-radius: 20rpx;
width: 700rpx;
padding: 30rpx;
box-sizing: border-box;
.hint {
display: flex;
align-items: center;
justify-content: space-between;
> view:nth-child(1) {
color: #303133;
font-size: 32rpx;
}
> view:nth-child(2) {
width: 50rpx;
height: 50rpx;
image {
width: 100%;
height: 100%;
}
}
}
.promptContent {
display: flex;
align-items: center;
margin-top: 30rpx;
> view:nth-child(1) {
width: 50rpx;
height: 50rpx;
image {
width: 100%;
height: 100%;
}
}
> view:nth-child(2) {
color: #606266;
font-size: 28rpx;
margin-left: 25rpx;
}
}
.operate {
display: flex;
justify-content: end;
margin-top: 30rpx;
> view:nth-child(1) {
padding: 15rpx 30rpx;
font-size: 24rpx;
border-radius: 6rpx;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
}
> view:nth-child(2) {
padding: 15rpx 30rpx;
font-size: 24rpx;
margin-left: 20rpx;
border-radius: 6rpx;
background: #009788;
border: 1px solid #dcdfe6;
color: #ffffff;
}
}
}
}
</style>
2、往vue中挂载组件 (创建js)
import Vue from 'vue'
import messag from './index.vue'
const VueComponent = Vue.extend(messag);
const vm = new VueComponent().$mount();
let init = false;
let defaultOptions = {
yesBtnText: '确定',
noBtnText: '取消'
};
const message = function (options) {
Object.assign(vm, defaultOptions, options, {
type: 'confirm'
});
if (!init) {
document.body.appendChild(vm.$el);
init = true;
}
return vm.messag();
};
export default message;
3、应用全局组件
3.1 在main.js中引入全局
import Message from '@/components/message/index'
Vue.prototype.$Message = Message;
this.$Message({ content: "模式未保存,确定离开?" })
.then(() => {
console.log("yes");
}).catch(() => {
console.log("cancel");
});
vue封装全局确认弹窗的更多相关文章
- echars vue 封装全局组件 曲线 柱状图 同v-chars绿色系 配置样式
Echars vue封装 ,曲线图 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 用vue2.x注册一个全局的弹窗alert组件
一.在实际的开发当中,弹窗是少不了的,默认系统的弹窗样式太丑,难以满足项目的实际需求,所以需要自己定义弹窗组件,把弹窗组价定义为全局的,这样减少每次使用的时候引入麻烦,节省开发时间.本文将分享如何定义 ...
- main.js中封装全局登录函数
1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...
- Vue列表组件与弹窗组件示例
列表组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <me ...
- 用vue2.x注册一个全局的弹窗alert组件、confirm组件
一.在实际的开发当中,弹窗是少不了的,默认系统的弹窗样式太丑,难以满足项目的实际需求,所以需要自己定义弹窗组件,把弹窗组价定义为全局的,这样减少每次使用的时候引入麻烦,节省开发时间.本文将分享如何定义 ...
- [转]Vue项目全局配置微信分享思路详解
这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...
- 浅析vue封装自定义插件
在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...
- Vue 封装axios(四种请求)及相关介绍(十三)
Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...
- 11 vue 自定义全局方法
//global.js// 定义vue 全局方 // 定义vue 全局方法 建议自定义的全局方法加_ 以示区分 export default { install(Vue, options = ...
- vue封装公用弹出框方法,实现点击出现操作弹出框
vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...
随机推荐
- angular---处于激活状态的路由加样式
- 十九岁纪念|HBD To ME
过了20年,终于摆脱了令人讨厌的应试生活.19岁,一半是高三,一半是大学,由高考,分成两半.说实话,我觉得大学也没有那么令人向往,换种方式读高四吧.长大了,对时间也没有什么概念了.要不是19岁在我的家 ...
- MySQL 合并查询join 查询出的不同列合并到一个表中
为了求解问题时思路清晰,建议先分列查询,再将列合并到一个表中,这样相当于将复杂问题拆解为简单问题,一一解决.优点是避免所有问题混在一起,代码逻辑清晰,可迁移性强,下次遇到类似的查询问题能快速求解,缺点 ...
- 论文翻译:2022_腾讯DNS 1th TEA-PSE: Tencent-ethereal-audio-lab personalized speech enhancement system for ICASSP 2022 DNS CHALLENGE
论文地址:TEA-PSE: 用于ICASSP 2022 DNS挑战赛的Tencent-ethereal-audio-lab 个性化语音增强系统 论文代码: 引用格式:Ju Y, Rao W, Yan ...
- MD5在Python中的简单使用
MD5不是加密 https://draveness.me/whys-the-design-password-with-md5/ 参考为什么这么设计 Message-Digest Algorithm 5 ...
- Ribbon负载均衡 (源码分析)
Ribbon负载均衡 SpringCloud已经删除了ribbon组件,所以需要手动导入依赖.(要学是因为很多项目业务已经使用了ribbon) 服务拉取的时候添加了@LoadBalanced注解,实现 ...
- linux08-进程管理
1.任务调度 2.进程 3.服务 4.进程.网络监控 1.任务调度crond 1.1基本说明 任务调度:是指系统在某个时间执行的特定的命令或程序. 任务调度分类: 1.系统工作:有些重要的工作必须周而 ...
- 亲测有效! Scrutiny 网站SEO检测及优化工具 V12.6.1 for mac
亲测有效! Scrutiny 网站SEO检测及优化工具 V12.6.1 for mac Scrutiny是一款网站SEO工具,它能够自动检测目标网站的坏链.HTML验证.描述Description. ...
- Jpbc哈希函数如何实现
1.(0,1)→Element元素 在Jpbc库中存在两个方法 Element A=G1.newRandomElement();A.setFromBytes(arr,0,arr.length);//A ...
- (原创)【B4A】一步一步入门04:编译模式、打包为APK、私钥签名
一.前言 上篇 (原创)[B4A]一步一步入门03:APP名称.图标等信息修改 中我们将APP做成了标准的样子. 本篇文章会讲解如何将程序打包成APK文件以分发,同时讲解如何制作私钥并签名APP,以用 ...