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 相关文章推荐
textContent在Firefox下与innerText等效的属性
May 12 Javascript
新浪微博字数统计 textarea字数统计实现代码
Aug 28 Javascript
jquery和ajax的关系详细介绍
Nov 29 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
JavaScript运动减速效果实例分析
Aug 04 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
May 26 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
JavaScript订单操作小程序完整版
Jun 23 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
微信小程序显示倒计时功能示例【测试可用】
Dec 03 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入门速成教程
2007/03/19 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
PHP生成器简单实例
2015/05/13 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php while循环控制的简单实例
2016/05/30 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
Angularjs 基础入门
2014/12/26 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
护士检查书
2014/01/17 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
安阳殷墟导游词
2015/02/10 职场文书
如何才能写好调研报告?
2019/07/03 职场文书