fadeIn 和 fadeOut 的 jquery 问题

Posted

技术标签:

【中文标题】fadeIn 和 fadeOut 的 jquery 问题【英文标题】:jquery issue with fadeIn and fadeOut 【发布时间】:2013-11-28 07:26:48 【问题描述】:

当用户单击具有特定 ID 的锚链接时,我正在尝试创建一种方法来显示和隐藏 div 内的内容(基于类)。

我有一个带有锚链接的字母 A-Z 索引。当有人点击特定链接(字母)时,javascript 会隐藏(淡出)所有列出特定类的 div。然后脚本显示(淡入)我所追求的 div。

问题是其中有 13 个,我在下面分享了前 3 个以帮助提供上下文。

当在字母之间来回点击时,会出现一些奇怪的时间和延迟问题。有时即使我将时间设置得很短,div 显示仍然存在并且不会淡出很长时间。

我确信在几个函数中可能有更聪明的方法来解决这个问题,但我不知道该怎么做。

如果您有任何问题,或者需要更多详细信息和上下文,请告诉我。

$('#letter-a').mousedown(function()    
    $('.letter-b, .letter-c, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function()
        $('.letter-a').delay(600).fadeIn(500);
    );
);

$('#letter-b').mousedown(function()    
    $('.letter-a, .letter-c, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function()
        $('.letter-b').delay(600).fadeIn(500);
    );
);

$('#letter-c').mousedown(function()    
    $('.letter-a, .letter-b, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function()
        $('.letter-c').delay(600).fadeIn(500);
    );
);

【问题讨论】:

嗨,如果我的问题没看错,你想制作一个手风琴,这意味着:你只想同时显示一个 div。实际上并不是很难做到,但我总是使用插件,因为我确定我没有错误。试试其中一个1stwebdesigner.com/freebies/jquery-accordion-menus-tutorials 【参考方案1】:

试试.stop(true,true)

你的代码的小版本

var cls_all = $('[class*="letter-"]'); //cached
$('[id^="letter-"]').mousedown(function () 
    var cls = this.id;
    cls_all.not('.' + cls).stop(true, true).fadeOut(100, function () 
        $('.' + cls).delay(600).stop(true, true).fadeIn(500);
    );
);


^ attribute-starts-with-selector

* attribute-contains-selector/

【讨论】:

@PSL 我也想做同样的事情,但this 指的是id^="letter- 而OP 想要上课。我想它们是不同的。 是的,我后来意识到了.. 快速看看有这个想法... :) 或许你可以在外面缓存 $('[class*="letter-"]') 并使用它。 非常感谢 Tushar 提供的解决方案。我将 84 行代码浓缩成 7 行代码。纯天才——我非常感激! :-)【参考方案2】:

点击时发生了一些奇怪的时间和延迟问题 在字母之间来回切换。

尝试使用 stop() 方法(http://api.jquery.com/stop/):

$('.letter-b, .letter-c, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').stop().fadeOut(100, function()
        $('.letter-a').delay(600).fadeIn(500);
    );

如果没有帮助 - 尝试用 setTimeout 替换 delay()

【讨论】:

【参考方案3】:

试试这个

$('#letter-a').mousedown(function () 
    $('.letter-b, .letter-c, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function () 
        setTimeout(function () 
            $('.letter-a').fadeIn(500);, 600);
        );
    );

$('#letter-b').mousedown(function () 
    $('.letter-a, .letter-c, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function () 
        setTimeout(function () 
            $('.letter-b').fadeIn(500);, 600);
        );
    );

$('#letter-c').mousedown(function () 
    $('.letter-a, .letter-b, .letter-g, .letter-h, .letter-i, .letter-m, .letter-n, .letter-o, .letter-r, .letter-s, .letter-t, .letter-u, .letter-w').fadeOut(100, function () 
        $('.letter-c').fadeIn(500);, 600);
    );
);

【讨论】:

以上是关于fadeIn 和 fadeOut 的 jquery 问题的主要内容,如果未能解决你的问题,请参考以下文章

replaceWith() while 元素 fadeOut() 和 fadeIn() 在 JQuery

fadeIn 和 fadeOut 的 jquery 问题

jquery IE Fadein 和 Fadeout Opacity

jQuery效果-----fadeIn()fadeOut()fadeToggle()fadeTo()

JQuery fadeIn fadeOut 与 setInterval 偶尔工作

210 jQuery淡入淡出:fadeIn() fadeOut() fadeToggle() fadeTo()