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 相关文章推荐
jquery预览图片实现鼠标放上去显示实际大小
Jan 16 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
基于Jquery实现表单验证
Jul 20 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
Dec 23 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
使用node打造自己的命令行工具方法教程
Mar 26 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
Aug 04 Javascript
Vue中通过vue-router实现命名视图的问题
Apr 23 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
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
简单介绍Python中的RSS处理
2015/04/13 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python常用数据重复项处理方法
2019/11/22 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
日语求职信范文
2013/12/17 职场文书
超市营业员岗位职责
2013/12/20 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
会计师事务所实习证明
2014/11/16 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
投资意向协议书
2015/01/29 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA