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 相关文章推荐
jquery 必填项判断表单是否为空的方法
Sep 14 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
javascript实现des解密加密全过程
Apr 03 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 Javascript
JavaScript获取页面中超链接数量的方法
Nov 09 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
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下使用iconv需要注意的问题
2010/11/20 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue filters的使用详解
2018/06/11 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
专科毕业生自我鉴定
2013/12/01 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
施工安全保证书
2015/05/09 职场文书
网络舆情信息简报
2015/07/21 职场文书
客户答谢会致辞
2015/07/30 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
volatile保证可见性及重排序方法
2022/08/05 Java/Android