在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 相关文章推荐
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 Javascript
JavaScript简单实现弹出拖拽窗口(二)
Jun 17 Javascript
利用jquery实现瀑布流3种案例
Sep 18 Javascript
js实现下一页页码效果
Mar 07 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
js图片上传的封装代码
Aug 01 Javascript
JavaScript实现简单图片轮播效果
Aug 21 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
layui点击按钮页面会自动刷新的解决方案
Oct 25 Javascript
Vue学习之常用指令实例详解
Jan 06 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
Memcache 在PHP中的使用技巧
2010/02/08 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
对Python实现累加函数的方法详解
2019/01/23 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
出生公证委托书
2014/04/03 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
社区先进事迹材料
2014/05/19 职场文书
高中生旷课检讨书
2014/10/08 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android