jQuery队列操作方法实例


Posted in Javascript onJune 11, 2014

jQuery核心中, 有一组队列控制方法, 这组方法由queue()/dequeue()/clearQueue()三个方法组成, 它对需要连续按序执行的函数的控制可以说是简明自如, 主要应用于animate ()方法, ajax以及其他要按时间顺序执行的事件中.

先解释一下这组方法各自的含义.

queue(name,[callback]): 当只传入一个参数时, 它返回并指向第一个匹配元素的队列(将是一个函数数组,队列名默认是fx); 当有两个参数传入时, 第一个参数还是默认为fx的的队列名, 第二个参数又分两种情况, 当第二个参数是一个函数时, 它将在匹配的元素的队列最后添加一个函数. 当第二个参数是一个函数数组时,它将匹配元素的队列用新的一个队列来代替(函数数组).可能, 这个理解起来有点晕.

dequeue(name): 这个好理解, 就是从队列最前端移除一个队列函数, 并执行它.

clearQueue([queueName]):这是1.4新增的方法. 清空对象上尚未执行的所有队列. 参数可选,默认为fx. 但个人觉得这个方法没多大用, 用queue()方法传入两个参数的第二种参数即可实现clearQueue方法.

现在, 我们要实现这样一个效果, 有标有1至7的数字方块, 要求这七个方块自左到右依次下落. 查看DEMO
css与html部分我就不贴出来了, DEMO中有. 若按常规做法, 可能需要用如下jQ代码来实现:

$('.one').delay(500).animate({
    top: '+=270px'
},
500,
function() {
    $('.two').delay(500).animate({
        top: '+=270px'
    },
    500,
    function() {
        $('.three').delay(500).animate({
            top: '+=270px'
        },
        500,
        function() {
            $('.four').delay(500).animate({
                top: '+=270px'
            },
            500,
            function() {
                $('.five').delay(500).animate({
                    top: '+=270px'
                },
                500,
                function() {
                    $('.six').delay(500).animate({
                        top: '+=270px'
                    },
                    500,
                    function() {
                        $('.seven').animate({
                            top: '+=270px'
                        },
                        500,
                        function() {
                            alert('按序落体运动结束! Yeah!')
                        });
                    });
                });
            });
        });
    });
});

嗯, 没错, 效果很完美的呈现给出来了, 但这种晕眩的代码, 你能忍受吗? 即便可以忍受, 如果此时, 你想调换一个某个的执行顺序, 比如, 你想让5落下后再开始下落3, 或者新加8至15八个方块, 怎么办? 重写吗? 在里面小心冀冀的改吗? 显然, 我们需要另外一种列简明便捷的方法来实现这个效果, 那就是jQuery队列控制方法.请看如下代码:

var _slideFun = [function() {
    $('.one').delay(500).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.two').delay(300).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.three').delay(300).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.four').delay(300).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.five').delay(300).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.six').delay(300).animate({
        top: '+=270px'
    },
    500, _takeOne);
},
function() {
    $('.seven').delay(300).animate({
        top: '+=270px'
    },
    500,
    function() {
        alert('按序落体运动结束! Yeah!');
    });
}];
$('#demo').queue('slideList', _slideFun);
var _takeOne = function() {
    $('#demo').dequeue('slideList');
};
_takeOne();

这样一来, 看起来是不是简明多了. 如何实现?
1. 新建一个数组,把动画函数依次放进去(这样更改顺序,新加动画是不是方便多了?);
2. 用queue将这组动画函数数组加入到slideList队列中;
3. 用dequeue取出slideList队列中第一个函数, 并执行它;
4. 初始执行第一个函数.

至于clearQueue()方法,就不多说了, 演示中停止按钮调用的就是clearQueue()方法,当然你还可以用queue()方法直接将现在的函数列队替换成[]空数组实现(个人比较推荐空数组替换.,更直观).

Javascript 相关文章推荐
javascript 自动填写表单的实现方法
Apr 09 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
详解JavaScript设计模式开发中的桥接模式使用
May 18 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
PM2自动部署代码步骤流程总结
Dec 10 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
Jul 18 Javascript
Node 代理访问的实现
Sep 19 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 Javascript
JS生成不重复随机数组的函数代码
Jun 10 #Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 #Javascript
JS生成随机字符串的多种方法
Jun 10 #Javascript
json中换行符的处理方法示例介绍
Jun 10 #Javascript
Jquery焦点与失去焦点示例应用
Jun 10 #Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 #Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
Jun 10 #Javascript
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
JS 常用校验函数
2009/03/26 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
python生成日历实例解析
2014/08/21 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
如何理解python对象
2020/06/21 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
集体备课反思
2014/02/12 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
激励员工的口号
2014/06/16 职场文书
图书借阅制度范本
2015/08/06 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书