在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实现键盘方向键翻页功能的代码
Jun 03 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
深入浅析react native es6语法
Dec 09 Javascript
JQuery validate插件Remote用法大全
May 15 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
Angular 组件之间的交互的示例代码
Mar 24 Javascript
Angular.JS读取数据库数据调用完整实例
Jul 02 Javascript
详解如何修改 node_modules 里的文件
May 22 Javascript
vue实现循环滚动列表
Jun 30 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
php array的学习笔记
2012/05/16 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
YII实现分页的方法
2014/07/09 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
Python实现备份文件实例
2014/09/16 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python实现人工蜂群算法
2020/09/18 Python
自考毕业自我鉴定范文
2013/10/27 职场文书
运动会广播稿20字
2014/02/18 职场文书
新年团拜会主持词
2014/04/02 职场文书
企业安全生产标语
2014/06/06 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
司机岗位职责
2015/02/04 职场文书
教师节简报
2015/07/20 职场文书
导游词之西安大清真寺
2019/12/17 职场文书