Saya punya ini js di situs web saya untuk beralih gambar tetapi perlu penundaan ketika Anda mengklik gambar untuk kedua kalinya. Penundaan harus 1000 ms. Jadi Anda akan mengklik img.jpg maka img_onclick.jpg akan muncul. Anda kemudian akan mengklik gambar img_onclick.jpg maka harus ada penundaan 1000 ms sebelum img.jpg ditampilkan lagi.
Ini kodenya:
jQuery(document).ready(function($) {
$(".toggle-container").hide();
$(".trigger").toggle(function () {
$(this).addClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img_onclick.jpg');
}, function () {
$(this).removeClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img.jpg');
});
$(".trigger").click(function () {
$(this).next(".toggle-container").slideToggle();
});
});
javascript
jquery
Oranye biru
sumber
sumber
setTimeout(function(){/*YourCode*/},1000);
.stop()
sekalipun. SilakanJawaban:
Gunakan
setTimeout()
:Jika Anda ingin melakukannya tanpa
setTimeout
: Lihat pertanyaan ini .sumber
Tempatkan kode Anda di dalam
{ }
500
= 0,5 detik2200
= 2,2 detikdll.
sumber
Solusi ES-6
Di bawah ini adalah contoh kode yang menggunakan aync / menunggu untuk memiliki penundaan yang sebenarnya.
Ada banyak kendala dan ini mungkin tidak berguna, tetapi hanya memposting di sini untuk bersenang-senang ..
sumber
delay
fungsi menjadi async. Keterlambatan yang luar biasa ini berfungsi ketika Janji yang dikembalikan oleh fungsi reguler ditunggu di tubuh fungsi async.Ada dua jenis fungsi penghitung waktu (kebanyakan digunakan) dalam javascript
setTimeout
dansetInterval
( lainnya )Kedua metode ini memiliki tanda tangan yang sama. Mereka mengambil fungsi panggilan balik dan menunda waktu sebagai parameter.
setTimeout
dieksekusi hanya sekali setelah penundaan sedangkansetInterval
terus memanggil fungsi callback setelah setiap penundaan milidetik.kedua metode ini mengembalikan pengenal bilangan bulat yang dapat digunakan untuk menghapusnya sebelum timer kedaluwarsa.
clearTimeout
danclearInterval
kedua metode ini mengambil pengenal integer yang dikembalikan dari fungsi di atassetTimeout
dansetInterval
Contoh:
setTimeout
Jika Anda menjalankan kode di atas, Anda akan melihat bahwa itu mengingatkan
before setTimeout
danafter setTimeout
akhirnya mengingatkanI am setTimeout
setelah 1sec (1000 ms)Apa yang dapat Anda perhatikan dari contoh adalah bahwa
setTimeout(...)
asynchronous yang berarti tidak menunggu timer untuk berlalu sebelum pergi ke pernyataan berikutnya yaitualert("after setTimeout");
Contoh:
setInterval
Jika Anda menjalankan kode di atas, Anda akan melihat bahwa itu mengingatkan
before setInterval
danafter setInterval
akhirnya memberitahuI am setInterval
5 kali setelah 1sec (1000 ms) karena setTimeout menghapus timer setelah 5 detik atau setiap 1 detik Anda akan mendapatkan peringatan takI am setInterval
terhingga.Bagaimana browser secara internal melakukannya?
Saya akan jelaskan secara singkat.
Untuk memahami bahwa Anda harus tahu tentang antrian acara dalam javascript. Ada antrian acara yang diterapkan di browser. Setiap kali suatu peristiwa dipicu dalam js, semua peristiwa ini (seperti klik dll.) Ditambahkan ke antrian ini. Ketika browser Anda tidak memiliki apa-apa untuk dieksekusi, dibutuhkan suatu acara dari antrian dan mengeksekusi mereka satu per satu.
Sekarang, ketika Anda menelepon
setTimeout
atausetInterval
panggilan balik Anda didaftarkan ke timer di browser dan itu akan ditambahkan ke antrian acara setelah waktu yang diberikan berakhir dan akhirnya javascript mengambil acara dari antrian dan menjalankannya.Ini terjadi demikian, karena mesin javascript adalah utas tunggal dan mereka hanya dapat mengeksekusi satu hal pada satu waktu. Jadi, mereka tidak dapat mengeksekusi javascript lain dan melacak timer Anda. Itulah mengapa timer ini terdaftar dengan browser (browser tidak satu threaded) dan dapat melacak timer dan menambahkan acara dalam antrian setelah timer berakhir.
hal yang sama terjadi
setInterval
hanya dalam kasus ini acara ditambahkan ke antrian lagi dan lagi setelah interval yang ditentukan sampai dibersihkan atau halaman browser di-refresh.Karenanya, panggilan balik Anda kadang-kadang membutuhkan waktu lebih dari waktu tunda yang ditentukan untuk dipanggil secara khusus ketika kode Anda yang lain memblokir utas dan tidak memberikan waktu untuk memproses apa yang ada dalam antrian.
Dan seperti yang saya sebutkan javascript adalah utas tunggal. Jadi, jika Anda memblokir utasnya lama.
Suka kode ini
Pengguna Anda mungkin mendapatkan pesan yang mengatakan halaman tidak merespons .
sumber
setTimeout
jika Anda tidak ingin perilaku asinkron.Untuk panggilan sinkronisasi, Anda dapat menggunakan metode di bawah ini:
sumber
Jika Anda perlu menyegarkan, ini adalah kemungkinan lain:
sumber
Inilah yang saya lakukan untuk menyelesaikan masalah ini. Saya setuju ini karena masalah waktu dan perlu jeda untuk mengeksekusi kode.
Kode baru ini akan menjeda selama 1 detik dan sementara itu jalankan kode Anda.
sumber
Saya akan memberikan masukan karena membantu saya memahami apa yang saya lakukan.
Untuk membuat tayangan slide gulir otomatis yang menunggu 3 detik, saya melakukan hal berikut:
Ingat bahwa ketika menjalankan setTimeout () seperti ini; itu akan mengeksekusi semua fungsi time out seolah-olah mereka di mana dieksekusi pada saat yang sama dengan asumsi bahwa dalam setTimeout (nextImage, delayTime); waktu tunda adalah statis 3000 milidetik.
Apa yang saya lakukan untuk menjelaskan hal ini adalah menambah 3000 mili / s setelah masing-masing untuk penambahan loop melalui
delayTime += timeIncrement;
.Bagi mereka yang peduli di sini adalah seperti apa nextImage () saya:
sumber