在悬停时使用将变量设置为true jquery

时间:2012-07-18 09:22:11

标签: jquery boolean

我的问题很简单,但它让我大吃一惊。我正在使用jquery函数在变量为false时使元素闪烁,并在true时隐藏:

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);
});

当我使用警报时,它确实显示正在运行的功能,但我确实如此,但我无法看到我的错误。使用firebug,bl的值保持为false。我尝试过全局bl和var bl,但都保持不变。谢谢你的帮助。

2 个答案:

答案 0 :(得分: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();
});

答案 1 :(得分: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寻求帮助,您应该遵循它的规则,并接受有效的答案。