vue教程之toast弹框全局调用示例详解


Posted in Javascript onAugust 24, 2020

本文实例为大家分享了vue toast弹框全局调用示例,供大家参考,具体内容如下

1.首选新建一个toast.vue模板文件:

<template>
 <transition :name="fadeIn">
 <div class="alertBox" v-show="show">
  <div class="alert-mask" v-show="isShowMask"></div>
  <transition :name="translate">
  <div class="box" :class="position" v-show="show">
   {{text}}
  </div>
  </transition>
 </div>
 </transition>
</template>

<script>
export default {
 data() {
 return {
 }
 },
 props: {
 show: { // 是否显示此toast
  default: false
 },
 text: { // 提醒文字
  default: 'loading'
 },
 position: { // 提醒容器位置
  default: 'center'
 },
 isShowMask: { // 是否显示遮罩层
  default: false
 },
 time: { // 显示时间
  default: 1500
 },
 transition: { // 是否开启动画
  default: true
 }
 },
 mounted() { // 时间控制
 setTimeout(() => {
  this.show = false
 }, this.time)
 },
 computed: {
 translate() { // 根据props,生成相对应的动画
  if (!this.transition) {
  return ''
  } else {
  if (this.position === 'top') {
   return 'translate-top'
  } else if (this.position === 'middle') {
   return 'translate-middle'
  } else if (this.position === 'bottom') {
   return 'translate-bottom'
  }
  }
 },
 fadeIn() { // 同上
  if (!this.transition) {
  return ''
  } else {
  return 'fadeIn'
  }
 }
 }
}
</script>

<style>
 .box{
 position: fixed;
 top: 50%;
 left: 50%;
 width: 100px;
 height: 100px;
 margin-left: -50px;
 margin-top: -50px;
 background: rgba(0,0,0,.5);
 text-align: center;
 line-height: 100px;
 color: #fff;
 font-size: 16px;
 z-index: 5000;
 color: #fff;
 }
 .box.top{
 top: 50px;
 margin-top: 0;
 }
 .box.center{
 top: 50%;
 margin-top: -100px;
 }
 .box.bottom{
 top: auto;
 bottom: 50px;
 margin-top: 0;
 }
 .alert-mask{
 position: fixed;
 left: 0;
 top: 0;
 bottom: 0;
 right: 0;
 background: rgba(0,0,0,.5);
 z-index: 4999;
 }
 .fadeIn-enter-active, .fadeIn-leave-active{
 transition: opacity .3s;
 }
 .fadeIn-enter, .fadeIn-leave-active{
 opacity: 0;
 }
 .translate-top-enter-active, .translate-top-leave-active{
 transition: all 0.3s cubic-bezier(.36,.66,.04,1);
 }
 .translate-top-enter, .translate-top-leave-active{
 transform: translateY(-50%);
 opacity: 0;
 }
 .translate-middle-enter-active, .translate-middle-leave-active{
 transition: all 0.3s cubic-bezier(.36,.66,.04,1);
 }
 .translate-middle-enter, .translate-middle-leave-active{
 transform: translateY(80%);
 opacity: 0;
 }
 .translate-bottom-enter-active, .translate-bottom-leave-active{
 transition: all 0.3s cubic-bezier(.36,.66,.04,1);
 }
 .translate-bottom-enter, .translate-bottom-leave-active{
 transform: translateY(100%);
 opacity: 0;
 }
</style>

2.主逻辑在toast.js里完成:

var Alert = require('./index.vue') // 引入vue模板
var Toast = {} // 定义插件对象
Toast.install = function (Vue, options) { // vue的install方法,用于定义vue插件
 // 如果toast还在,则不再执行
 if(document.getElementsByClassName('alertBox').length){ 
  return
 }
 let toastTpl = Vue.extend(Alert) // 创建vue构造器
 // el:提供一个在页面上已存在的DOM元素作为Vue实例的挂载目标。可以是css选择器,也可以是HTMLElement实例。
 // 在实例挂载之后,可以通过$vm.$el访问。
 // 如果这个选项在实例化时有用到,实例将立即进入编译过程。否则,需要显示调用vm.$mount()手动开启编译(如下)
 // 提供的元素只能作为挂载点。所有的挂载元素会被vue生成的dom替换。因此不能挂载在顶级元素(html, body)上
 // let $vm = new toastTpl({
 // el: document.createElement('div')
 // })
 let $vm = new toastTpl() // 实例化vue实例
 // 此处使用$mount来手动开启编译。用$el来访问元素,并插入到body中
 let tpl = $vm.$mount().$el
 document.body.appendChild(tpl)

 Vue.prototype.$toast = { // 在Vue的原型上添加实例方法,以全局调用
 show(options) { // 控制toast显示的方法
  if (typeof options === 'string') { // 对参数进行判断
  $vm.text = options // 传入props
  }
  else if (typeof options === 'object') {
  Object.assign($vm, options) // 合并参数与实例
  }
  $vm.show = true // 显示toast
 },
 hide() { // 控制toast隐藏的方法
  $vm.show = false
 }
 }
}
export default Toast; // 导出Toast(注意:此处不能用module exports导出,在一个文件中,不能同时使用require方式引入,而用module exports导出,两种方式不能混用)

使用:

在vue项目的主文件中,引入插件,并进行安装:

vue教程之toast弹框全局调用示例详解

这样在项目的任何组件里,都可以使用这个toast的弹窗插件了:

vue教程之toast弹框全局调用示例详解

想要更高级的插件学习源码,请移步vux进行源码学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript new一个对象的实质
Jan 07 Javascript
jquery下异步提交表单 异步跨域提交表单
Nov 17 Javascript
JavaScript自动设置IFrame高度的小例子
Jun 08 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
js实现时钟定时器
Mar 26 Javascript
vue配置多代理服务接口地址操作
Sep 08 Javascript
如何用JS实现简单的数据监听
May 06 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 #Javascript
jQuery实现手势解锁密码特效
Aug 14 #jQuery
Vue+Element使用富文本编辑器的示例代码
Aug 14 #Javascript
带你快速理解javascript中的事件模型
Aug 14 #Javascript
JS获取子、父、兄节点方法小结
Aug 14 #Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 #Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 #Javascript
You might like
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
学前教育毕业生自荐信范文
2013/12/24 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
电影雷锋观后感
2015/06/10 职场文书
2015年女工委工作总结
2015/07/27 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
利用Python实现Picgo图床工具
2021/11/23 Python