在vue中封装的弹窗组件使用队列模式实现方法


Posted in Javascript onJuly 23, 2020

前言

由于业务需要,需要在封装的弹窗组件中引入定时器实现倒计时效果,但是如果同时触发两个弹窗,就会导致计时器bug,前一个弹窗的定时器没有被清除,倒计时就会错乱,此时想到的解决办法就是采用队列模式,将每一个需要的弹窗存到队列中,依次的将弹窗展示出来,同时清除定时器

什么是队列

队列(Queue)是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在尾部进行插入操作(入队 enqueue),在头部进行删除操作(出队 dequeue)。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。

JavaScript实现队列的效果

function ArrayQueue(){ 
  var arr = []; 
    //入队操作 
  this.push = function(element){ 
    arr.push(element); 
    return true; 
  } 
    //出队操作 
  this.pop = function(){ 
    return arr.shift(); 
  } 
    //获取队首 
  this.getFront = function(){ 
    return arr[0]; 
  } 
    //获取队尾 
  this.getRear = function(){ 
    return arr[arr.length - 1] 
  } 
    //清空队列 
  this.clear = function(){ 
    arr = []; 
  } 
    //获取队长 
  this.size = function(){ 
    return length; 
  } 
}

和vue封装的弹窗组件使用

首先要配合组件封装队列要进行修改

class Queue {
 dataStore = []
 constructor(){
  this.dataStore=[]
 }
 enqueue(e) {
  this.dataStore.push(e)
  console.warn('入队',this.dataStore);
 }

 dequeue() {
  this.dataStore.shift()
  console.warn('出队',this.dataStore);
 }

 front() {
  console.log(this.dataStore,'front')
  return this.dataStore[0]()
 }
 select(){
  return this.dataStore[0]
 }

 back() {
  return this.dataStore[this.dataStore.length - 1]
 }

 isEmpty() {
  if (this.dataStore.length == 0) {
   return true
  }
  return false
 }

 toString() {
  return this.dataStore.join(',')
 }
}

export default Queue

在弹出第一个队列的时候需要自执行。

在你的封装组件的函数中引入这个队列,同时实例化这个队列,写入两个方法.

const pushDialog = (eventName) => {
 if (queue.isEmpty()) {
  queue.enqueue(eventName);
  openDialog();
 } else {
  queue.enqueue(eventName);
 }
}
const openDialog = () => {
 // 打开弹窗
 queue.front();
}

在安装的方法中将每一个弹窗加入队列中

在vue中封装的弹窗组件使用队列模式实现方法

需要注意的是,每个弹窗是要被销毁的,不然会导致方法重复。

举例在确认方法和定时器后怎么出队列和清空定时器

在vue中封装的弹窗组件使用队列模式实现方法

到此这篇关于在vue中封装的弹窗组件使用队列模式实现的文章就介绍到这了,更多相关vue 封装的弹窗组件队列模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Packer 3.0 JS压缩及混淆工具 下载
May 03 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
实现jquery放大镜的两种方法
Feb 22 jQuery
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
详解node.js 事件循环
Jul 22 #Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 #jQuery
详解vue中v-on事件监听指令的基本用法
Jul 22 #Javascript
使用vue实现通过变量动态拼接url
Jul 22 #Javascript
You might like
关于时间计算的结总
2006/12/06 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
Python基于Faker假数据构造库
2020/11/30 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
C#公司笔试题
2014/03/28 面试题
《守株待兔》教学反思
2014/03/01 职场文书
汽车转让协议书
2015/01/29 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
一篇文章带你复习java知识点
2021/06/28 Java/Android