在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 相关文章推荐
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
jquery等待效果示例
May 01 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 Javascript
vue代码分割的实现(codesplit)
Nov 13 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
Nov 07 Javascript
js前端设计模式优化50%表单校验代码示例
Jun 21 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
ASP.NET Core中的配置详解
2021/02/05 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
岗位竞聘书范文
2014/03/31 职场文书
批评与自我批评总结
2014/10/17 职场文书
分居协议书范本
2014/11/03 职场文书
企业计划生育责任书
2015/05/09 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android