jquery - loop - stop timer javascript




jQuery setInterval/hovering: cela fonctionne une fois, mais arrête le setInterval (2)


J'ai un problème avec ma fonction "setInterval", je voudrais démarrer la fonction quand je suis en train de planer mon div, mais le setInterval fonctionne juste à la première fois quand je passe la souris sur div => si je reste sur le div, il ne continue pas à changer l'image, mais arrête le 'setinterval'.

Est-ce un problème avec mouseenter? J'ai essayé 'hover', etc. mais rien ne semble faire l'affaire.

Quelqu'un a-t-il une solution?

Merci beaucoup pour votre aide, voici mon code:

img.bind('mouseenter', function(){
    setInterval(next($(this)),1000);
});

function next(elem){  
    var img_li = elem.find('li');  
    count++;  
    if (count>2) count=0;  

    img_li.eq(count).fadeIn('fast', function(){  
        img_li.eq(current).css({'display':'none'});

        current = count;  
    });  
}

C'est parce que vous attribuez la valeur de retour de next ($ (this)) à setInterval et non à la fonction elle-même.

Essaye ça:

img.bind('mouseenter', function(){     
    var that = $(this); //Use that-this model to avoid any scope issues with this reference
    setInterval(function(){
        next(that);
    },1000); 
}); 

Vous pouvez envisager d'utiliser le plugin jQuery Timers , ce qui facilite le travail avec de telles fonctions. En particulier, jetez un oeil à ce qui suit:

everyTime (intervalle: Integer | String, [étiquette = intervalle: chaîne], fn: Fonction, [times = 0: Integer])

everyTime va ajouter la fonction définie (fn) en tant qu'événement chronométré pour s'exécuter à un intervalle de temps donné (intervalle) pour un nombre de fois donné (fois). Si times est défini sur 0, le nombre de fois que la méthode est appelée est illimité. Une étiquette est également définie pour l'événement timed donné soit à la chaîne fournie (label) ou à la représentation sous forme de chaîne de l'intervalle fourni. De plus, l'intervalle peut être défini en utilisant une chaîne telle que "3s" pendant 3 secondes.







setinterval