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的图片的切换(以数字的形式)
Feb 14 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
node.js中的fs.readlink方法使用说明
Dec 17 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
Sep 12 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
Jan 03 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 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学习资源和链接.
2006/12/05 PHP
php smarty函数扩展
2010/03/15 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
php析构函数的简单使用说明
2015/08/24 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
类之Prototype.js学习
2007/06/13 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
django 环境变量配置过程详解
2019/08/06 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
竞职演讲稿范文
2014/01/11 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
涨价通知怎么写
2015/04/23 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL