Maison  >  Questions et réponses  >  le corps du texte

javascript - Pourquoi setInterval n'est-il exécuté qu'une seule fois?

partie jquery

$(function(){
            
            function direct(){
                
                for(var i=0;i<2;i++){
                $(".bg_img").eq(i).show().siblings().hide();
                }
            }

            setInterval(direct,1000);
        })

partie HTML

<p class="main_bg">
        <p class="bg_img bg1"></p>
        <p class="bg_img bg2"></p>
    </p>

partie CSS

.bg2 affichage par défaut : aucun ;

Tout le monde, ne me méprisez pas, merci pour vos réponses~

黄舟黄舟2643 Il y a quelques jours944

répondre à tous(7)je répondrai

  • ringa_lee

    ringa_lee2017-06-30 09:57:19

    Je ne veux pas vous mépriser, mais c'est évidemment un problème de syntaxe... En fait, je pense que setInterval est toujours exécuté, mais le résultat d'exécution de votre fonction direct est corrigé. Le résultat final de la boucle est que la deuxième image est affichée. et la première image est masquée, il semble donc qu'elle ne soit pas implémentée.

    Tu devrais faire ceci :

    var current = 0;
    function direct(){
      $(".bg_img").eq(current).show()
        .siblings().hide();
      current++;
      if (current > 1) {
        current = 0;
      }  
    }

    Une fermeture est utilisée ici pour enregistrer l'état en dehors de la minuterie afin qu'il puisse être bouclé à chaque fois.

    Ajoutez également quelques connaissances sur le rendu. Pour que ce type de boucle for change l'état d'affichage, le navigateur mettra en cache ces états puis les restituera à un moment approprié, au lieu de les restituer immédiatement dès que vous le modifiez. Donc on ne peut même pas le voir clignoter.

    répondre
    0
  • 学习ing

    学习ing2017-06-30 09:57:19

    Veuillez vous y référer

    $(function(){
      function direct(i){
        $(".bg_img").eq(i).show().siblings().hide();
      }
    
      var i = 0;
      setInterval(function () {
        direct(i)
        i = (i + 1) % $(".bg_img").length
      }, 1000);
    })

    répondre
    0
  • 習慣沉默

    習慣沉默2017-06-30 09:57:19

    setInterval(function direct(){

                
                for(var i=0;i<2;i++){
                $(".bg_img").eq(i).show().siblings().hide();
                }
            },1000);
          直接这样试试,控制台看看,有没有报错,如果报错的话,js也不会继续执行了的。
    

    répondre
    0
  • 滿天的星座

    滿天的星座2017-06-30 09:57:19

    Après avoir bouclé une fois, la valeur de i est 1 puis elle reste 1. Essayez d'utiliser let

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-30 09:57:19

    Voulez-vous que cet effet soit affiché un par un dans l'ordre ?

    jQuery(function($){
        var bgImg = $(".bg_img"),
            maxIndex = bgImg.length - 1,
            i = 0;
    
        function direct(){
            bgImg.eq(i).show().siblings().hide();
    
            if (i < maxIndex) {
                i++;
            } else {
                i = 0;
            }
        }
    
        setInterval(direct, 1000);
    });

    répondre
    0
  • 为情所困

    为情所困2017-06-30 09:57:19

    $(fonction(){

    var index = 0;
    setInterval(function(){
        (index < $('.bg_img').length) ? index ++ : index = 0;
        $('.bg_img').eq(index).show().siblings().hide();
    },1000);

    })

    répondre
    0
  • 滿天的星座

    滿天的星座2017-06-30 09:57:19

    setInterval(direct(),1000);

    Je ne sais pas si c'est vrai, mais j'ai toujours l'impression que c'est là le problème

    répondre
    0
  • Annulerrépondre