-1

Ergo:为什么这行不通?

我正在尝试制作动画功能,它必须根据其名称更改 css div 的位置。例如,产品 1 不需要更改其顶部位置,产品 2 需要更改,产品 3 需要更改更多。

已经为此苦苦挣扎了好几个小时!

if($(this).attr("class") = "product1")
        {
            $(this).cssAnimate({height: '100%',marginBottom:'-350px'}, {duration: 400});
        }
        else if($(this).attr("class") = "product2")
        {
            $(this).cssAnimate({top:'-176px',height: '100%',marginBottom:'-350px'}, {duration: 400});
        }
        else if($(this).attr("class") = "product3")
        {
            $(this).cssAnimate({top:'-352px',height: '100%',marginBottom:'-350px'}, {duration: 400});
        }
        else
        {
        return false;
        }
4

2 回答 2

1

首先,您需要将“=”更改为“==”。

于 2013-02-23T01:01:42.250 回答
0

考虑更接近这一点的东西:

var topPx;
var productClass = $(this).attr("class");

switch (productClass) {
    case "product1": topPx = "0px";    break;
    case "product2": topPx = "-176px"; break;
    case "product3": topPx = "-353px"; break;
    default: return false;
}

$(this).cssAnimate({
    top:          topPx,
    height:       '100%',
    marginBottom: '-350px'
}, {
    duration: 400
});

有很多方法可以写这个,但我倾向于以沟通为目标,并消除重复的冗余。例如,没有理由继续获取该"class"属性;大概它不会在这段代码的生命周期内改变。除了单个条目之外,参数 tocssAnimate是相同的,因此仅更改该条目是有意义的。

return我对我在 switch 语句中的使用并不感到兴奋。选项包括显式比较、检查productClass数组值是否存在等。使用类到像素偏移的映射也很容易:

var offsets = {
    "product1": "0px",
    "product2": "-176px",
    "product3": "-353px"
};

var productClass = $(this).attr("class");
var offset = offsets[productClass];
if (offset === undefined) {
    return false;
}

$(this).cssAnimate({
    top:          offset,
    height:       '100%',
    marginBottom: '-350px'
}, {
    duration: 400
});

您可能希望将其包装到获取偏移量的方法中,或者可能返回将与默认映射合并的选项映射。

于 2013-02-23T01:17:59.173 回答