Pytanie Opóźnienie JQuery przed fadeOut


Napisałem skrypt jquery, który pozwala mi zanikać divy i out, a następnie powtórzyć. Kod działa poprawnie. Jednak, gdy próbuję dodać opóźnienie (chcę, aby div pozostał na kilka sekund przed zniknięciem), to nie działa poprawnie. Próbowałem dodać opóźnienie w kilku miejscach wewnątrz kodu i żaden nie wydaje się działać poprawnie. Korzystam z Jquery w wersji 1.9.1

Oto skrypt, który napisałem:

$(document).ready(function(){
   ShowPostDiv(0);
});

function ShowPostDiv(divIndex)
{
    $(".home_entry_txt").hide();

    if(divIndex >= $(".rotate_hide").length)
    {
        divIndex = 0;
    }
    var divPostHtml = $(".rotate_hide:eq("+divIndex+")").html();
    $(".home_entry_txt").html(divPostHtml); 
    $(".home_entry_txt").fadeIn(3000, function(){
             $(".home_entry_txt").fadeOut("slow");
        });
    divIndex++;
    setTimeout("ShowPostDiv("+divIndex+")", 4000);
}

18
2018-03-28 16:01


pochodzenie


Czy próbowałeś $ (". Home_entry_txt"). Delay (5000) .fadeOut ("slow"); ? - isotrope
Na marginesie warto użyć anonimowej funkcji setTimeout, a nie łańcucha. Więc, setTimeout(function() { ShowPostDiv(divIndex); }, 4000); - Colin DeClue


Odpowiedzi:


Możesz po prostu napisać

$(".home_entry_txt").fadeIn(3000).delay(1000).fadeOut("slow");

36
2018-03-28 16:05





Czy próbowałeś .delay ()? coś jak:

$(".home_entry_txt").fadeIn().delay(200).queue(function(next) {
$(".home_entry_txt").fadeOut("slow");
});

3
2018-03-28 16:09





Spróbuj tego

$(document).ready(function(){
   ShowPostDiv(0);
});

function ShowPostDiv(divIndex)
{
    $(".home_entry_txt").hide();

    if(divIndex >= $(".rotate_hide").length)
    {
        divIndex = 0;
    }
    var divPostHtml = $(".rotate_hide:eq("+divIndex+")").html();
    $(".home_entry_txt").html(divPostHtml); 
    $(".home_entry_txt").fadeIn(3000, function(){
        setTimeout(function(){
            $(".home_entry_txt").fadeOut("slow");
        },4000);
    });
    divIndex++;
}

2
2018-03-28 16:06



Dzięki! Spróbowanie tego spowodowało, że zniknęło, zatrzymaj się chwilę, a następnie zaniknij. To jest to czego chcę. Jednak nie powtórzy się z następnym div. Jak mógłbym to powtórzyć, żeby następny div zniknął, zostać chwilę, a potem zejść? - user2220474
nie jestem pewien co masz na myśli przez następny div? - iAmClownShoe


Myślę, że problem polega na tym, że musisz przekazać funkcję jako pierwszy parametr i przekazujesz ciąg znaków. Spróbuj wymienić swoje setTimeout() Linia z tym:

setTimeout(function(){
    ShowPostDiv(divIndex);
}, 4000);

Źródło:  http://www.w3schools.com/jsref/met_win_settimeout.asp


1
2018-03-28 16:05



nie osiągnie to celu PO. Spowoduje to jedynie opóźnienie, gdy nastąpi pierwsze zaniknięcie, ponieważ opóźnisz całe wywołanie funkcji - iAmClownShoe
To wcale nie jest rozwiązanie. Jest to dokładnie to samo, ale z lepszą praktyką. Nie używaj również w3schools: w3fools.com - Colin DeClue