用jquery编写全局动画队列

2024-01-23

使用 jQuery 将一系列动画添加到单个 dom 元素非常简单。 jQuery 为我很好地排列了一切,我基本上不需要做任何事情。

然而,在多个元素上制作一系列动画(例如,pictureDiv 淡出,然后填充人口统计Div 淡入)要困难得多。我写了一个插件类型的东西,以使其更容易,如下所示:

var something.createAnimationQueue = function () {

    // jQuery queues up animations on each dom element (/ jquery object)
    // We want to queue up animations over different dom elements so 
    // use a jquery object on a blank element
    var animationQueue = $({});

    return {
        add: function (animationFunctionContext, animationFunction) {
            var args = $.makeArray(arguments).slice(2);
            animationQueue.queue(function (next) {
                $.when(animationFunction.apply(animationFunctionContext, args)).done(next)
            })
        }
    }
}

这是这样使用的

        var animationQueue = something.createAnimationQueue();

        animationQueue.add(pictureDiv, pictureDiv.fadeOut, 'slow');
        animationQueue.add(demographicsDiv, demographicsDiv.fadeIn, 'slow');

我的问题是:

1)我错过了什么吗?有没有一种我不知道的更简单的方法可以做到这一点。

2)如果没有,是否有办法避免将 pictureDiv 和 pictureDiv.fadeOut 传递给animationQueuer? (我试过了,想不出一个)

Thanks!


由于您正在使用 .apply 并重新分配this,你可以简单地使用

var animationQueue = something.createAnimationQueue();

animationQueue.add(pictureDiv, $.fn.fadeOut, 'slow');
animationQueue.add(demographicsDiv, $.fn.fadeIn, 'slow');

如果你真的愿意,你可以把它变成一个字符串:

var something.createAnimationQueue = function () {

    // jQuery queues up animations on each dom element (/ jquery object)
    // We want to queue up animations over different dom elements so 
    // use a jquery object on a blank element
    var animationQueue = $({});

    return {
        add: function (animationFunctionContext, method) { // <----
            var args = $.makeArray(arguments).slice(2);
            animationQueue.queue(function (next) {
                $.when($.fn[method].apply(animationFunctionContext, args)).done(next) // <----
            })
        }
    }
}

var animationQueue = something.createAnimationQueue();

animationQueue.add(pictureDiv, 'fadeOut', 'slow'); // <----
animationQueue.add(demographicsDiv, 'fadeIn', 'slow'); // <----

但请注意,现在它只能用于动画。如果您像最初那样使用它,则可以将其与任何返回 Promise 对象的 jQuery 方法一起使用,例如 .ajax、.post、.get、.getJSON 等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用jquery编写全局动画队列 的相关文章

随机推荐