0

我的问题很简单,但它让我很困惑。我正在使用 jquery 函数在变量为假时使元素闪烁,并在为真时隐藏:

function flasher(bl){
    if(!bl){
    setInterval(function(){
            $(".flash").fadeToggle("slow");
            }, 300);
    }
}
var bl = false;
$(document).ready(function(){
    $(".flash").on("hover", function(){
        bl = true;
    });

        flasher(bl);
});

当我使用警报时,它确实显示功能正在运行并且我得到了真实,但我无法看到我的错误。使用萤火虫 bl 的值保持为假。我已经尝试过 global bl 和 var bl,但都保持不变。感谢您的帮助。

4

2 回答 2

2

试试这个 :

function flasher(){
      setInterval(function(){
         if(!bl){
              $(".flash").fadeToggle("slow");
         }
      }, 300);
}

var bl = false;
$(document).ready(function(){
    $(".flash").hover(function(){
        bl = true;
    }, function() {
        bl = false;
    });
    flasher();
});
于 2012-07-18T09:27:33.623 回答
1

您的问题是您的就绪函数在开始时只运行一次,因此您的函数闪烁器只运行一次。

每次更改变量的状态时都需要运行它。

$(document).ready(function(){
    var interval;
    $(".flash").on("hover", function(){ // hoverin
        interval = setInterval(function(){
               $(".flash").fadeToggle("slow");
            }, 300);
    }, function(){ // hoverout
        clearInterval(interval);
        $(".flash").fadeOut("slow");
    });
});

此外,在您的间隔中,您使用 300 毫秒的间隔,并且您的 fadeToggle 很慢(即 600 毫秒)。这意味着当您已经开始下一个时,您的淡入淡出动画还没有结束。即使您清除了间隔,您的动画也会被打乱并继续闪烁几秒钟。

另外,正如您已经被告知的那样,如果您打算继续使用 StackOverflow 寻求帮助,您应该遵守它的规则,并接受有效的答案。

于 2012-07-18T09:29:17.770 回答