在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切换div css注意的细节
Dec 10 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
学习JavaScript设计模式之责任链模式
Jan 18 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
May 02 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
vue实现匀速轮播效果
Jun 29 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教程 预定义变量
2009/10/23 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
JS常见算法详解
2017/02/28 Javascript
Vue计算属性的使用
2017/08/04 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
python实现电子产品商店
2019/02/26 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python过滤序列元素的方法
2020/07/31 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
《水上飞机》教学反思
2014/04/10 职场文书
企业文化标语口号
2014/06/09 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
小学音乐课教学反思
2016/02/18 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
MySQL 逻辑备份 into outfile
2022/05/15 MySQL