Javascript'te zaman gecikmesi nasıl ayarlanır
Web sitemde görüntüleri değiştirmek için bir js parçası var, ancak görüntüye ikinci kez tıkladığınızda bir gecikmeye ihtiyacım var. Gecikme 1000 ms olmalıdır. Yani img.jpg'ye tıkladıktan sonra img_onclick.jpg görünecek. Daha sonra img_onclick.jpg resmine tıklarsınız, img.jpg tekrar gösterilmeden önce 1000 ms'lik bir gecikme olmalıdır.
İşte kod:
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();
});
});
143
3
setTimeout()`** işlevini kullanın:
Eğer
setTimeout
olmadan yapmak istiyorsanız: Bu soruya bakın]1.Kodunuzu
{ }
içine yerleştirin500` = 0,5 saniye
2200` = 2,2 saniye
vs.
Javascript
te
setTimeoutve
setInterval` olmak üzere iki (çoğunlukla kullanılan) tür zamanlayıcı işlevi vardır (other)Bu yöntemlerin her ikisi de aynı imzaya sahiptir. Parametre olarak bir geri çağırma işlevi ve gecikme süresi alırlar.
setTimeout
gecikmeden sonra yalnızca bir kez yürütülürken,
setInterval` her gecikme milisaniyesinden sonra geri arama işlevini çağırmaya devam eder.Bu yöntemlerin her ikisi de zamanlayıcı sona ermeden önce bunları temizlemek için kullanılabilecek bir tamsayı tanımlayıcı döndürür.
clearTimeout
veclearInterval
bu yöntemlerin her ikisi de yukarıdakisetTimeout
vesetInterval
işlevlerinden döndürülen bir tamsayı tanımlayıcı alırÖrnek:
setTimeout
Yukarıdaki kodu çalıştırırsanız,
setTimeout
tan önce` ve ardındansetTimeout
tan sonra` uyarı verdiğini ve son olarak 1sn (1000ms) sonraI am setTimeout
uyarısı verdiğini göreceksinizÖrnekten de fark edebileceğiniz gibi
setTimeout(...)
asenkrondur, yani bir sonraki deyime geçmeden önce zamanlayıcının dolmasını beklemez, yanialert("after setTimeout");
Örnek:
setInterval
Yukarıdaki kodu çalıştırırsanız, setInterval'den önce
before setInterval
uyarısı verdiğini ve ardındanafter setInterval
son olarak 1sn (1000ms) sonra 5 kezI am setInterval
uyarısı verdiğini göreceksiniz çünkü setTimeout 5 saniye sonra zamanlayıcıyı temizler, aksi takdirde her 1 saniyede birI am setInterval
Sonsuz uyarısı alırsınız.**Tarayıcı bunu dahili olarak nasıl yapar?
Kısaca açıklayacağım.
Bunu anlamak için javascript'te olay kuyruğu hakkında bilgi sahibi olmanız gerekir. Tarayıcıda uygulanan bir olay kuyruğu vardır. Js'de bir olay tetiklendiğinde, bu olayların tümü (tıklama vb. gibi) bu kuyruğa eklenir. Tarayıcınızın yürütecek bir şeyi olmadığında, kuyruktan bir olay alır ve bunları tek tek yürütür.
Şimdi,
setTimeout
veyasetInterval
dediğinizde, geri aramanız tarayıcıdaki bir zamanlayıcıya kaydedilir ve verilen süre dolduktan sonra olay kuyruğuna eklenir ve sonunda javascript olayı kuyruktan alır ve yürütür.Bunun nedeni, javascript motorunun tek iş parçacıklı olması ve bir seferde yalnızca bir şey yürütebilmesidir. Yani, başka javascript çalıştıramazlar ve zamanlayıcınızı takip edemezler. Bu nedenle bu zamanlayıcılar tarayıcıya kaydedilir (tarayıcı tek iş parçacıklı değildir) ve zamanlayıcıyı takip edebilir ve zamanlayıcı sona erdikten sonra kuyruğa bir olay ekleyebilir.
Aynı şey
setInterval
için de geçerlidir, ancak bu durumda olay, belirtilen aralıktan sonra temizlenene veya tarayıcı sayfası yenilenene kadar tekrar tekrar kuyruğa eklenir.Bu nedenle, geri aramanızın çağrılması, özellikle diğer kodunuz iş parçacığını bloke ettiğinde ve kuyrukta ne olduğunu işlemesi için zaman vermediğinde, belirtilen gecikme süresinden daha uzun sürebilir.
Ve bahsettiğim gibi javascript tek iş parçacıklıdır. Yani, eğer iş parçacığını uzun süre engellerseniz.
Bu kod gibi
Kullanıcınız sayfa yanıt vermiyor şeklinde bir mesaj alabilir.