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 相关文章推荐
监控 url fragment变化的js代码
Apr 19 Javascript
基于JQuery制作的产品广告效果
Dec 08 Javascript
JavaScript中的this实例分析
Apr 28 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
iframe的onreadystatechange事件在firefox下的使用
Apr 16 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
May 16 Javascript
seajs学习之模块的依赖加载及模块API的导出
Oct 20 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
Vue配合iView实现省市二级联动的示例代码
Jul 27 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
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
小谈php正则提取图片地址
2014/03/27 PHP
php强制运行广告的方法
2014/12/01 PHP
php for 循环使用的简单实例
2016/06/02 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python处理写入数据代码讲解
2020/10/22 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
打造高效课堂实施方案
2014/03/22 职场文书
学校对教师的评语
2014/04/28 职场文书
任命书范本大全
2014/06/06 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL