Rumah >hujung hadapan web >tutorial css >Bagaimanakah Saya Boleh Menghentikan Gelung `setTimeout` atau `setInterval` dalam JavaScript?

Bagaimanakah Saya Boleh Menghentikan Gelung `setTimeout` atau `setInterval` dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-12-01 16:23:09308semak imbas

How Can I Stop a `setTimeout` or `setInterval` Loop in JavaScript?

Menghentikan gelung setTimeout

Apabila membina penunjuk pemuatan menggunakan sprite, pendekatan biasa melibatkan penggunaan fungsi untuk menetapkan kedudukan latar belakang penunjuk. Untuk mencipta gelung berterusan, kod tersebut menggunakan secara rekursif menggunakan fungsi dalam panggilan balik setTimeout. Walau bagaimanapun, mungkin tiba satu tahap di mana anda perlu menghentikan gelung ini setelah menyelesaikan tindakan tertentu.

Satu penyelesaian adalah untuk mendapatkan semula pemegang pemasa yang dikembalikan oleh setTimeout dan menggunakannya dengan clearTimeout untuk menamatkan gelung. Berikut ialah versi kod yang diubah suai yang melaksanakan pendekatan ini:

function setBgPosition() {
  var c = 0, timer = 0;
  var numbers = [0, -120, -240, -360, -480, -600, -720];

  function run() {
    Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
    if (c >= numbers.length) {
      c = 0;
    }
    timer = setTimeout(run, 200);
  }

  timer = setTimeout(run, 200);
  
  return stop;  // Function to stop the loop

  function stop() {
    if (timer) {
      clearTimeout(timer);
      timer = 0;
    }
  }
}

Untuk menggunakan kod ini, anda boleh memanggil setBgPosition() dan menyimpan fungsi yang dikembalikan (berhenti) dalam pembolehubah:

var stop = setBgPosition();

Apabila anda perlu menghentikan gelung, cuma panggil fungsi henti:

stop();

Sebagai alternatif, anda boleh gunakan setInterval dan bukannya setTimeout. setInterval secara automatik mengulangi fungsi yang ditentukan pada selang waktu tertentu. Berikut ialah contoh menggunakan setInterval:

function setBgPosition() {
  var c = 0;
  var numbers = [0, -120, -240, -360, -480, -600, -720];

  function run() {
    Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
    if (c >= numbers.length) {
      c = 0;
    }
  }
  
  return setInterval(run, 200);
}

Dalam senario ini, kod di bawah akan menghentikan gelung:

var timer = setBgPosition();
clearInterval(timer);

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan Gelung `setTimeout` atau `setInterval` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn