首页 文章

Mouseleave无法使用.each和延迟?

提问于
浏览
0

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

mouseenter功能正常工作但是当你悬停链接时我想做的是原始更改的反向(所以改回原始颜色) .

我把延迟退出它的工作但是效果并不好 . 我很困惑为什么这对输入而不是休假?

还有一点需要注意的是,当它确实将颜色变回灰色时,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 回答

  • -2

    最有可能的问题是你的函数在mouseenter和mouseleave中创建的闭包 . 它们都引用相同的 delay 变量 . 您可能想要将它们分开:

    delayEnter = 0;
    delayLeave = 0;
    
  • 1

    jQuery .queue() 使用起来很复杂,所以除非你需要与jQuery动画队列中的其他东西进行交互,否则使用_399508就像这样简单得多 . 您还应该使 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
    

相关问题