Rumah  >  Soal Jawab  >  teks badan

javascript - Mengapa setInterval hanya dilaksanakan sekali?

bahagian jquery

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

            setInterval(direct,1000);
        })

bahagian html

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

bahagian css

.bg2 paparan lalai:tiada;

Kawan-kawan, jangan hina saya, terima kasih atas jawapan anda~

黄舟黄舟2692 hari yang lalu965

membalas semua(7)saya akan balas

  • ringa_lee

    ringa_lee2017-06-30 09:57:19

    Bukan untuk menghina anda, tetapi ini jelas merupakan masalah sintaks... Sebenarnya, saya fikir setInterval sentiasa dilaksanakan, tetapi hasil fungsi anda direct telah ditetapkan Hasil akhir gelung ialah gambar kedua dipaparkan dan gambar pertama disembunyikan, jadi Nampaknya ia tidak dilaksanakan.

    Anda harus melakukan ini:

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

    Penutupan digunakan di sini untuk menyimpan keadaan di luar pemasa supaya ia boleh digelung ke bawah setiap kali.

    Juga tambahkan sedikit pengetahuan tentang rendering. Untuk gelung for jenis ini untuk menukar keadaan paparan, penyemak imbas akan cache keadaan ini dan kemudian memberikannya pada masa yang sesuai, bukannya memberikannya serta-merta sebaik sahaja anda mengubah suainya. Jadi anda tidak dapat melihatnya berkelip.

    balas
    0
  • 学习ing

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

    Sila rujuk

    $(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);
    })

    balas
    0
  • 習慣沉默

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

    setInterval(fungsi langsung(){

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

    balas
    0
  • 滿天的星座

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

    Selepas gelung sekali, nilai i ialah 1 dan kemudian kekal 1. Cuba gunakan let

    balas
    0
  • 过去多啦不再A梦

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

    Adakah anda mahu kesan ini dipaparkan satu persatu mengikut urutan?

    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);
    });

    balas
    0
  • 为情所困

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

    $(fungsi(){

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

    })

    balas
    0
  • 滿天的星座

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

    setInterval(direct(),1000);

    Saya tidak tahu sama ada ia betul, tetapi saya sentiasa merasakan bahawa ini adalah masalahnya

    balas
    0
  • Batalbalas