0

我想使用选择器将一个对象从 jquery 传递给一个 javascript 函数,如下所示。

flash($("#something span"), "#fff", 250);

但它似乎没有工作。

而且我不确定在javascript函数中放什么。我现在做的是:

function flash(obj,color1,color2,duration) {
    obj.animate({backgroundColor:color1},duration);
    setTimeout(function(){this.animate({backgroundColor:color2},duration);},duration);
}

还是有另一种方法而不是传递一个对象?例如,在 jquery 中: $("this").flash("#f79999", "#eee", 250);

但是那么如何定义javascript函数呢?

4

3 回答 3

1

您有一个简单的语法错误。

ojb.animate({backgroundColor:color},duration);

应该

obj.animate({backgroundColor:color},duration);
于 2012-10-23T23:30:36.110 回答
0

您必须包含jQuery.Color插件来为background-color.

来自“动画属性和值:”

所有动画属性都应该被动画化为单个数值,除非下面提到;大多数非数字属性不能使用基本的 jQuery 功能进行动画处理(例如,widthheight,或者left可以动画background-color不能,除非使用 jQuery.Color() 插件)。[...]


有没有另一种方法而不是传递一个对象?例如,在 jquery 中: $("this").flash("#fff",250);

jQuery 的插件/创作应该对此有所帮助。但是,您可以将其定义为:

jQuery.fn.flash = function (color, duration) {
    return this.animate({ backgroundColor: color }, duration);
};

$('#something span').flash('#fff', 250);
于 2012-10-23T23:51:13.983 回答
0

在页面中安装了jQuery.Color插件(ack。@Jonathan Lonowski)......

您可以避免使用 javascript.call().apply().

这是一个例子:

$(function() {
    function flash(color, duration) {
        this.animate({backgroundColor:color}, duration);
    }
    $("#something span").on('click', function() {
        flash.call($(this), "#fff", 250);
    });
    $("#something_else span").on('click', function() {
        flash.apply($(this), ["#fff", 250]);
    });
});

.call()并且.apply()在这里不是必需的;常规函数调用就足够了。

.call()并且.apply()通常用于需要调用一个对象的方法但为其提供另一个对象的上下文的情况。通过这样做,该方法可以在不同的this.

于 2012-10-24T00:27:24.490 回答