【问题标题】:Mouseleave does not work with .each and delay?Mouseleave 不适用于 .each 和延迟?
【发布时间】:2013-03-06 00:23:27
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery mouseenter mouseleave


    【解决方案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
    

    【讨论】:

    • 谢谢,在 setTimeout() 方法工作得更好之前,我遇到了 .queue() 的问题!
    【解决方案2】:

    很可能问题出在 mouseenter 和 mouseleave 中的函数创建的闭包上。它们都引用了相同的 delay 变量。您可能想将它们分开:

    delayEnter = 0;
    delayLeave = 0;
    

    【讨论】:

    • 为delay 使用全局变量是一种不好的形式,但是在 OP 的代码中对delay 的引用本身并没有延迟,所以我看不出这将如何解决问题。 delay 本身根本没有以延时方式引用。
    • 没有假设变量是全局的。我只是建议不要为两个鼠标事件引用相同的变量。
    • 但这并不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多