Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

$(document).ready(function() { 
                 $('[data-toggle="tooltip"]').tooltip('show');
            $(window).scroll(function() {
                var hT = ($('.ADD-LIST').offset().top)-77,
                    hH = $('.ADD-LIST').outerHeight(),
                    wH = $(window).height(),
                    wS = $(this).scrollTop();  

                if (wS > (hT+hH-wH) && (hT > wS) && (wS+wH > hT+hH)){  
                    setTimeout(function(){$('[data-toggle="tooltip"]').tooltip('hide'); }, 5000);
                }  
                else{
                   clearTimeout(setTimeout(function(){$('[data-toggle="tooltip"]').tooltip('hide'); }, 5000));
                    $('[data-toggle="tooltip"]').tooltip('show');
                }
             }); 
        }); 

Ce que je veux

je cherche comment faire un clear pour settimout car j'ai testé toute sorte de code mais sans aucun resultat, mon timer ne se réinitialise pas avec le ClearTimeout.
le code affiche une tooltip et la faire disparaitre dans 5s.
Le but c'est de réinitialiser un mon setTimeout quand le scroll dépasse mon element (ADD-LIST)

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

12 réponses


Bonjour,

setTImout retourne un unique id. C'est cet id que tu dois donner à clearTimeout. https://developer.mozilla.org/ro/docs/Web/API/window.setTimeout

shiko
Auteur

je l'ai mis dans le code mais ça marche pas :
clearTimeout(setTimeout(function(){$('[data-toggle="tooltip"]').tooltip('hide'); }, 5000));

shiko
Auteur

j'ai même mis le setTimeout dans une variable et je l'ai passé au clearTimeout, sans resultat....

Vas tu dans ton else déjà ?

pk faire un clearTimeout ????????
le setTimeOut n'appel q'une seule fois la fonction

@pluche
Pierre

shiko
Auteur

parce que quand le scroll dépasse mon element et il revient vers lui et bien il doit compter depuis 0 les 5s, ce qui n'est pas le cas, car il compte parfois 2s, 3s..

j'espère être claire

merci

pk tu veut faire un clearTimeOut ??

Pierre

shiko
Auteur

@Pierre je t'ai répondu :
parce que quand le scroll dépasse mon element et il revient vers lui et bien il doit compter depuis 0 les 5s, ce qui n'est pas le cas, car il compte parfois 2s, 3s et il fait disparaitre l'element (il faut toujours qu'il le cache dans 5s)

j'espère être claire

merci

"j'ai même mis le setTimeout dans une variable et je l'ai passé au clearTimeout, sans resultat...."

Tu l'avais déclaré à quel niveau ta variable ?

Je n'ai pas tout compris aux explications, mais qu'est ce que ça donne si tu fais ça :

$(document).ready(function() {
    $('[data-toggle="tooltip"]').tooltip('show');
    var timeoutInstance;
    $(window).scroll(function() {
        var $addList = $('.ADD-LIST'),
            hT = ($addList.offset().top)-77,
            hH = $addList.outerHeight(),
            wH = $(window).height(),
            wS = $(this).scrollTop();

        if (wS > (hT+hH-wH) && (hT > wS) && (wS+wH > hT+hH)){
            timeoutInstance = setTimeout(function(){$('[data-toggle="tooltip"]').tooltip('hide'); }, 5000);
        } else{
            clearTimeout(timeoutInstance);
            $('[data-toggle="tooltip"]').tooltip('show');
        }
    });
}); 
shiko
Auteur

rien, même resultat quand je depasse mon element au scroll, et je reviens vers lui, normalement la tooltip doit apparaitre et disparaitre dans 5s, mais là elle apparait et diparait trop vite (1s ou 2s)

Pour éliminer le fait que "tooltip" ne ferait pas ce qu'il est sensé faire, as-tu tester de bien mettre des "console.log" aux endroits stratégiques afin de savoir si ton code à toi est correcte et s'éxecute bien au moment où il est sensé s'éxecuter ?

Sinon, fais-nous un jsfiddle d'exemple, ça ira plus vite ainsi pour t'aider.

Edit, il serait intéressant, par soucis d'optimisation, de mettre "$('[data-toggle="tooltip"]')" dans une variable, histoire de ne pas faire la recherche de l'élément à chaque fois.

shiko
Auteur

oui j'ai bien mis des console.log, enfait j'ai fait plusieurs tests, plusieurs essais ...