【问题标题】:jQuery and switch statementjQuery 和 switch 语句
【发布时间】:2017-08-26 23:51:47
【问题描述】:

我使用 jQuery 的 switch 语句(见下文)有问题:

$(window).scroll(function() {
var sc = $(document).scrollTop();
switch (sc) {
case sc > 200:
    $('.row1').fadeIn();
    break;  
case sc > 600: 
    $('.row2').fadeIn();
    break;     
case sc > 1000:  
    $(".row3").fadeIn(); 
}
});

当我向下滚动 200px 时,应该会出现带有 class="row1" 的 div 标签。但它没有出现。

有人知道我的代码有什么问题吗?

谢谢

【问题讨论】:

  • 这不是 switch 语句的工作方式 - 使用一组 if-else ...(您可以重新排序并将其改写为 switch(true)... 但是很糟糕)

标签: jquery switch-statement


【解决方案1】:

您不能在 switch 语句中使用>

改为使用if ... else if 链:

var sc = $(document).scrollTop();
if (sc > 1000) {  
    $(".row3").fadeIn(); 
} else if (sc > 600) {
    $('.row2').fadeIn();
} else if (sc > 200) {
    $('.row1').fadeIn();
}

注意:注意条件是相反的,所以你会得到正确的结果。如果您将它们保持在原始顺序,那么if (sc > 1000) 在到达时将永远不会为真。 sc 的这种值已经用早期的 if (sc > 200) 处理。

另类

如果您喜欢紧凑的代码,您也可以使用三元运算符编写此代码,并且只处理不同的部分,即row 后面的数字:

$(".row" + (sc > 1000 ? 3 : sc > 600 ? 2 : sc > 200 ? 1 : 0)).fadeIn(); 

这可能会产生选择器.row0,但因为它确实(应该)不存在,所以在这种情况下什么都不会发生。

【讨论】:

  • 为什么它们的条件是相反的,而不是相反的?
  • @PopPilli,我在回答中添加了更多解释。
  • @trincot 最后的代码行给了我一些新知识。谢谢。+1(在你提出要求后立即提供)
  • @trincot 三元运算符示例很棒。谢谢:D
猜你喜欢
  • 2010-11-28
  • 2016-09-24
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多