富贵资源网 Design By www.hznty.com
效果图:
下面是源码:
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("取消"); } });
总结
富贵资源网 Design By www.hznty.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
富贵资源网 Design By www.hznty.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。