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函数整理
Oct 25 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
怎么引入(调用)一个JS文件
May 26 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 Javascript
Antd下拉选择,自动匹配功能的实现
Oct 24 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
Oct 31 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/11/16 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php实现Session存储到Redis
2015/11/11 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
javascript 框架小结 个人工作经验
2009/06/13 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
python获取从命令行输入数字的方法
2015/04/29 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
售房委托书
2014/08/30 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
音乐会主持人开场白
2015/05/28 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
Java线程的6种状态与生命周期
2022/05/11 Java/Android