vue插件--仿微信小程序showModel实现模态提示窗功能


Posted in Javascript onAugust 19, 2020

效果图:

vue插件--仿微信小程序showModel实现模态提示窗功能

下面是源码:

index.js

import Vue from 'vue';
import model from './model.vue';
 
 
export default {
 install(Vue) {
 
 const defaults = {
  show: false,
  mask: true,
  title: '提示',
  content: '这是正文',
  confirmButton: true,
  cancelButton: true,
  confirmText: '确认',
  cancelText: '取消',
  cancelCallBack: () => {},
  confirmCallBack: () => {}
 };
 
 const modelVueConstructor = Vue.extend(model);
 
 Vue.prototype.$model = (options = {}) => {
  if (Vue.prototype.$isServer) return;
  options = Object.assign({}, defaults, options);
  let parent = document.body ;
  let instance = new modelVueConstructor({
  el: document.createElement('div'),
  data: options
  });
  parent.appendChild(instance.$el);
 
  return instance;
 };
 
 },
};

model.vue

<template>
 <div v-if="show" class="model-container">
 <div class="model-main">
  <div class="model-title">{{title}}</div>
  <div class="model-content" v-html="content"></div>
  <div class="model-buttons">
  <button v-if="cancelButton" @click="cancelClick" class="button">{{cancelText}}</button>
  <button v-if="confirmButton" @click="confirmClick" class="button confirm">{{confirmText}}</button>
  </div>
 </div>
 <div v-show="mask" class="model-mask"></div>
 </div>
 
</template>
 
<script type="text/babel">
 export default {
 data() {
 return {
 show: false,
 mask: true,
 title: '提示',
 content: '这是正文',
 confirmButton: true,
 cancelButton: true,
 confirmText: '确认',
 cancelText: '取消',
 cancelCallBack: () => {},
 confirmCallBack: () => {}
 };
 },
 methods: {
 cancelClick(){
  this.show = false;
  this.cancelCallBack();
 },
 confirmClick(){
  this.show = false;
  this.confirmCallBack();
 }
 }
 };
</script>
<style lang="less" scoped>
 .model-container{
 width: 100%;
 height: 100vh;
 position: fixed;
 top: 0;
 left: 0;
 z-index: var(--model-index);
 display: flex;
 justify-content: center;
 align-items: center;
 .model-main{
  position: relative;
  z-index: 9;
  width: 80%;
  background-color: #ffffff;
  border-radius: 10px;
  overflow: hidden;
  text-align: center;
  .model-title{
  font-size: 18px;
  color: #333;
  width: 100%;
  padding: 18px;
  font-weight: bold;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  }
  .model-content{
  font-size: 16px;
  color: #666;
  padding: 10px;
  padding-top: 0px;
  padding-bottom: 20px;
  }
  .model-buttons{
  width: 100%;
  display: flex;
  align-items: center;
  .button{
   flex: 1;
   padding: 18px 10px;
   overflow: hidden;
   white-space: nowrap;
   text-overflow: ellipsis;
   font-size: 16px;
   outline: none;
   background-color: #ffffff;
   border-top: 1px solid #f2f2f2;
   border-right: 1px solid #f2f2f2;
   &.confirm{
   color: var(--theme);
   font-weight: bold;
   }
   &:last-child{
   border-right: 0;
   }
   &:active{
   background-color: #f2f2f2;
   }
  }
  }
 }
 .model-mask{
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  background-color: rgba(0,0,0,0.45);
 }
 }
</style>

通过添加实例方法,把插件添加到vue.prototype上来实现。

在使用之前需要将插件挂载到Vue全局实例上:

main.js

import VueModel from './components/model/index.js';
Vue.use(VueModel);

完成上述条件后,就可以在你的vue项目中使用啦:

this.$model({
 show: true,
 title: "提示",
 content: "提示内容",
 cancelButton: true,
 confirmCallBack: () => {
 console.log("确认");
 },
 cancelCallBack: () => {
 console.log("取消");
 }
});

总结

到此这篇关于vue插件--仿微信小程序showModel实现模态提示窗的文章就介绍到这了,更多相关微信小程序showModel实现模态提示窗内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS中style属性
Oct 11 Javascript
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 Javascript
利用JavaScript检测CPU使用率自己写的
Mar 22 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
基于复选框demo(分享)
Sep 27 Javascript
Angular项目从新建、打包到nginx部署全过程记录
Dec 09 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
实例讲解React 组件生命周期
Jul 08 Javascript
jQuery实现评论模块
Aug 19 #jQuery
javaScript代码飘红报错看不懂?读完这篇文章再试试
Aug 19 #Javascript
jQuery实现简单评论功能
Aug 19 #jQuery
原生JS实现多条件筛选
Aug 19 #Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 #Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 #Javascript
JS实现炫酷雪花飘落效果
Aug 19 #Javascript
You might like
杏林同学录(六)
2006/10/09 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
php实现字符串翻转的方法
2015/03/27 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
详解python读取和输出到txt
2019/03/29 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
五十岁生日宴会答谢词
2014/01/15 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
合作协议书范文
2014/08/20 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2014年科研工作总结
2014/12/03 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
15个值得收藏的JavaScript函数
2021/09/15 Javascript
docker 制作mysql镜像并自动安装
2022/05/20 Servers
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis