在jquery中使用hide/show

在jquery中使用hide/show,jquery,delay,show,each,slide,Jquery,Delay,Show,Each,Slide,此代码不起作用,如何解决 我把一切都藏起来了。。在这之后,我在7秒的延迟内一个接一个地显示 但是一切都显示出来了,我不明白为什么 $(function() { texts = $('.text-block'); slide = $('#slideshow'); // hide everything texts.each(function() { $(this).hide(); }); // show it once

此代码不起作用,如何解决

我把一切都藏起来了。。在这之后,我在7秒的延迟内一个接一个地显示

但是一切都显示出来了,我不明白为什么

$(function()    {
    texts = $('.text-block');
    slide = $('#slideshow');


    // hide everything
    texts.each(function()   {
       $(this).hide(); 
    });

    // show it once by once
    jQuery.each(texts, function()   {
       $(this).show(300);
       $(this).delay(7000);
       $(this).hide(300);
    });
});

首先,你不需要使用每个

texts = $('.text-block');
texts.hide(); // hides all matched elements
就逐个显示而言,延迟不会停止整个js线程的执行,这将是阻塞和不好的,并使您的应用程序看起来非常无响应。。要让他们一个接一个地看,你必须用不同的方式来写

可能是一个递归函数,在延迟后传递下一个元素,使用一个承诺来知道动画和延迟何时完成

像这样:


因为它是从同一点延迟的,如果你把延迟放在正确的地方

$(function()    {
    texts = $('.text-block');
    slide = $('#slideshow');


    // hide everything
    texts.hide(); 

    // show it once by once
    texts.each( function(index)   {
       $(this).delay(7000 * index).show(300);
    });
});
您想在显示后再次隐藏它吗?我删除了它,因为它只会显示然后隐藏

缩短版:

$(function() {
    $('.text-block').each(function(index){
        $(this).hide().delay(7000 * index).show(300);
    });
});

请改用签出。

索引从0开始,可能是您需要(索引+1)内部延迟和
文本。hide()
应隐藏所有内容,而不是
。每个
都为True,具体取决于您是否要延迟前一个7秒。mm True。。我的回答很好+1。这是个不错的主意,但似乎很难与foreach一起使用。更新了JSFIDLE示例,使其与您的问题和示例用法完全匹配。
$(function() {
    $('.text-block').each(function(index){
        $(this).hide().delay(7000 * index).show(300);
    });
});
$(function() {
    $('.text-block').hide().each(function(item, index) {
         $(item).delay(7000*index).show(300, function() {
             $(this).delay(7000).hide(300);
         });
    });
});