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
Lepaskan: 2024-12-01 16:23:09
asal
352 orang telah melayarinya

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;
    }
  }
}
Salin selepas log masuk

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

var stop = setBgPosition();
Salin selepas log masuk

Apabila anda perlu menghentikan gelung, cuma panggil fungsi henti:

stop();
Salin selepas log masuk

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);
}
Salin selepas log masuk

Dalam senario ini, kod di bawah akan menghentikan gelung:

var timer = setBgPosition();
clearInterval(timer);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan