Mouseleave无法使用.each和延迟?

时间:2013-03-06 00:23:27

标签: javascript jquery mouseenter mouseleave

我已经编写了一些代码来更改标签内每个字母的颜色,并在您悬停链接时显示弹出窗口。

mouseenter功能正常工作但是当你将鼠标悬停在链接上时,我希望与原始更改相反(因此请更改回原始颜色)。

我把延迟退出它的工作但是效果并不好。我很困惑为什么这对输入起作用但不在假期?

另一件值得一提的是当它确实将颜色变回灰色时,鼠标中心功能再次不起作用,这有点烦人。

以下是该网站的链接,以便您可以看到我在说什么,链接是底部的“触摸营销”链接

http://dev.touch-akl.com/colin/

请帮忙吗?

我的jQuery看起来像这样

$('#copyright a').mouseenter(function(){

    var $letters = $(this).find('span'),
    $sayhi = $(this).find('img'),
    delay = 0;

    $sayhi.animate({top:-30, 'opacity':1}, 500, "easeInOutExpo");

    $letters.each(function(){

        $(this).delay(delay).queue(function(){
            $(this).css({'color':'#333'});
        });

        delay+=35;      

    }); // end each

}).mouseleave(function(){

    var $letters = $(this).find('span'),
    delay = 0;

    $letters.each(function(){

        $(this).delay(delay).queue(function(){
            $(this).css({'color':'#333'});
        }); 

        delay+=35;      

    });

}); // end leave

2 个答案:

答案 0 :(得分:1)

jQuery .queue()使用起来很复杂,所以除非你需要与jQuery动画队列中的其他东西进行交互,否则使用这样的setTimeout()往往要简单得多。您还应该使delay成为局部变量,因此它不是隐式全局变量。

}).mouseleave(function(){
    var delay = 0;
    $(this).find('span').each(function(){
        var item = $(this);

        setTimeout(function(){
            item.css({'color':'#333'});
        }, delay); 

        delay+=35;      
    });
}); // end leave

答案 1 :(得分:-2)

问题很可能是你的函数在mouseenter和mouseleave中创建的闭包。他们都引用了相同的延迟变量。您可能想要将它们分开:

delayEnter = 0;
delayLeave = 0;