10
votes

retarder la projection d'un gif de chargement AJAX en utilisant jQuery

Quelle est la meilleure façon de mettre un retard sur la projection d'un gif Ajax-loader. Lorsque je clique sur un bouton, le chargeur GIF montre et se cache même si le temps pris est de quelques centaines de milli-secondes, cela donne au navigateur une sorte de scintillement. Ce que je veux dire, c'est seulement montrer le gif si cela prend plus que dire 1000 milli-secondes pour compléter la demande Ajax. xxx

mon chargeur div contient .... xxx

Quelle est la meilleure technique pour y parvenir?


0 commentaires

4 Réponses :


5
votes

Voici une façon amusante de le faire. Remplacer $ loader.show () code> avec ceci: xxx pré>

et votre commande masquer avec ceci: p>

window.clearTimeout($("#loader").hide().data('timeout'));


6 commentaires

@Dcneiner, rapide Q - Qu'est-ce que 'Timeout'?


Juste un attribut de données personnalisé pour conserver le int renvoyé de Settimeout associé à notre objet DOM. C'est soit cela ou déclarer une autre variable comme @Jitter. Je voulais juste montrer une façon contenue de le faire avec JQuery.


@Ragez ClearTimeout ne fonctionne que lorsque vous avez passé le même entier renvoyé à partir de la fonction Settimeout . Puisque je stocke le entier dans une attribut personnalisé , cela fonctionnerait bien.


Doh! Oublié la longueur du délai d'attente ... Mise à jour de ma réponse :)


Merci Man :) Au moins, vous penserez éventuellement à l'aide de la fonctionnalité dans le futur. Bonne chance pour votre projet!


@Doug, bonne idée en utilisant des données! +1 à coup sûr. J'aime ne pas avoir une variable horlogère globale. Merci d'avoir affiché ça.



22
votes

Comme vous pouvez le constater, j'ai ajouté un délai d'attente qui retarde pour 300MS. Si Ajax est plus rapide, le délai d'attente est annulé avant que le chargeur ne soit réellement montré.

<script type="text/javascript">
    var showLoader;
    $(document).ready(function() {
        $('#loader').hide();
        $('#btnGetPeople').click(function() {
            // only show loader if ajax request lasts longer then 300 ms
            showLoader = setTimeout("$('#loader').show()", 300);
            $.getJSON("/User/GetName/10",
                null,
                function(data) { showPerson(data); });
        });
    });

    function showPerson(data) {
        clearTimeout(showLoader);
        alert(data);
        $('#loader').hide();
    }
</script>


1 commentaires

LOL ... c'est ce que je reçois pour être non conventionnel. Bonne réponse @ Jitter



0
votes

pensais que je partagerais quelque chose que j'ai fait pour cela. J'ai eu une situation où je devais faire plus que simplement montrer ou cacher l'élément unique. Donc, j'ai utilisé pour créer des événements personnalisés pour le chargeur: xxx


0 commentaires

1
votes

Vous pouvez aussi le faire comme ça. xxx


0 commentaires