JavaScript blokları genellikle eş zamanlı olarak yürütülür. Fakat bazen keyfi olarak zamanlanmış bir şekilde kodlarınızın yürütülmesini isteyebilirsiniz. Bu işlemler için javascriptte doğal zamanlayıcı fonksiyonları mevcuttur. Bu yazıda bu fonksiyonların nasıl kullanıldığı örneklerle açıklanmıştır.
JavaScript zamanlayıcı işlevleri şunlardır. Genellikle de aşağıdaki işlemler için kullanılır.
- setTimeout(): işlevinizin(fonksiyon) belirtilen gecikmeden sonra bir kez çalışmasını isterseniz kullanırsınız.
- setInterval() : Animasyonlar gibi defalarca çalıştırılacak işlemler için kullanılır. belirtilen gecikmeden sonra fonksiyon tekrar çağrılır.
- requestAnimationFrame() : Animasyon çağrımlarında kullanılır. Bir önceki boyamadan önce animasyonu gerçekleştirecek fonksiyonun çağrılmasını sağlar. Animasyonlarda yeniden boyama ve akış döngüsünü optimize eder.
window.set Timeout() Kullanımı
Zamanlayıcı sona erdikten sonra bir işlev yürütülmesini sağlar.
var TimerId = window.setTimeout(fonk[, gecikme, param1, param2, …]);
Parametreler
fonk: gecikme sonunda çalıştırılacak fonksiyon
gecikme: fonksiyonun çalıştırılması için gerekli olan süreyi ifade eder.
param1, param2, : fonksiyona gönderilecek parametreleri ifade eder.
Dönüş Değeri
TimerId : setTimeOut() metodu tarafından tanımlanan sıfır dışında eşsiz bir değeri ifade eder. Bu değer window.clearTimeout() metodu tarafından zamanlayıcıyı iptal etmek için kullanılır.
Örnek 1:
1 2 3 4 5 6 7 8 9 10 11 |
<p>Butona tıkla ve 3 saniye bekle</p> <button onclick="uyariVer()">Tıkla</button> <script> function uyariVer() { setTimeout(function(){ alert("Merhaba Dünya"); }, 3000); } </script> |
Örnek 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<h1>Zamanlayıcı Örnek window.setTimeOut()</h1> <button onclick="uyariVer();">3 saniye sonra uyarı ver</button> <button onclick="zamanlamaIptal();">Zamanlamayı İptal Et</button> <script> var timerId; function uyariVer() { timerId = window.setTimeout(zamanlayici, 3000); } function zamanlayici() { alert("tıklama üzerinden 3000ms geçti"); } function zamanlamaIptal() { window.clearTimeout(timerId); } </script> |
Örnek 3:
1 2 3 4 5 6 7 8 9 10 11 12 |
<p>Sayfa yüklendikten 3 saniye sonra uyarı verecektir.</p> <div id="sonuc"></div> <script> setTimeout(ornek,3000); function ornek() { document.getElementById("sonuc").innerHTML="Süre doldu."; } </script> |
window.setInverval() Kullanımı
Her çağrı arasında sabit bir geçikme ile bir kod parçası yada bir fonksiyonu çalıştırır.
var intervalID = window.setInterval(func, delay[, param1, param2, …]);
Parametreler
fonk: gecikme sonunda çalıştırılacak fonksiyon
gecikme: fonksiyonun çalıştırılması için gerekli olan süreyi ifade eder.
param1, param2, : fonksiyona gönderilecek parametreleri ifade eder.
Dönüş Değeri
intervalID : window.setInterval() metodu tarafından tanımlanan sıfır dışında eşsiz bir değeri ifade eder. Bu değer window.clearInterval() metodu tarafından zamanlayıcıyı iptal etmek için kullanılır.
Örnek 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<button onclick="ornek()">Çalıştır</button> <script> var inervalID; function ornek() { inervalID = setInterval(uyariVer, 3000); } function uyariVer() { alert("Merhaba Dünya!"); } </script> |
Örnek 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<div id="panel"></div> <button onclick="intervalCalistir();">Çalıştır</button> <button onclick="intervalDurur();">Durdur</button> <script> var zId; function intervalCalistir() { zId = setInterval(divYazdir, 1000); } function divYazdir() { var panel = document.getElementById("panel"); panel.innerHTML +="Merhaba Dünya<br>"; } function intervalDurur() { clearInterval(zId); } </script> |
Örnek 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<body onload="renkInterval()"> <script> var inervalID; function renkInterval() { inervalID = setInterval(uyariVer, 1000); } function uyariVer() { var renk1= Math.floor(255*Math.random()); var renk2= Math.floor(255*Math.random()); var renk3= Math.floor(255*Math.random()); document.body.style.backgroundColor="rgb("+renk1+","+renk2+","+renk3+")"; } </script> </body> |
window.requestAnimationFrame() Kullanımı
JavaScriptte zamanlanmış işlevleri gerçekleştirmek için setInterval metodu kullanılırdı. İstenilen hızda animasyonları gerçekleştirmek için (saniyede 50 kareden fazla gösterilmek istenirse) artık window.requestAnimationFrame kullanılır.
window.requestAnimationFrame(fonk);
fonk: Performance.now() metodu tarafından şuanki sistem zamanını ifade eden tek ve yanlız bir sayıyı parametre olarak alan fonksiyonu ifade eder.
Örnek 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<div id="hareket">x</div> <script> var baslangic = null; var etiket = document.getElementById("hareket"); etiket.style.position = 'absolute'; function step(zaman) { if (!baslangic) baslangic = zaman; var progress = zaman - baslangic; etiket.style.left = Math.min(progress/10, 200) + "px"; if (progress < 2000) { window.requestAnimationFrame(step); } } window.requestAnimationFrame(step); </script> |
Örnek 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<style> div { width: 20px; height: 20px; background: #1DABB8; float: left; } button { position: absolute; top: 20px; left: 20px; } #stop { left: 100px; } </style> <script> var animateFrameId; function oynat() { var element= document.createElement("div"); document.body.appendChild(element); animateFrameId = requestAnimationFrame(oynat); } animateFrameId = requestAnimationFrame(oynat); </script> |
Örnek 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Animate Frame</title> </head> <body> <style> div { width: 20px; height: 20px; float: left; } button { position: absolute; top: 20px; left: 20px; } #stop { left: 100px; } </style> <script> var animateFrameId; function oynat() { var element= document.createElement("div"); document.body.appendChild(element); var renk1= Math.floor(255*Math.random()); var renk2= Math.floor(255*Math.random()); var renk3= Math.floor(255*Math.random()); element.style.backgroundColor="rgb("+renk1+","+renk2+","+renk3+")"; animateFrameId = requestAnimationFrame(oynat); } animateFrameId = requestAnimationFrame(oynat); </script> </body> </html> |
Kaynaklar
https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout
https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval
https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
css-tricks.com/using-requestanimationframe/
[…] JavaScript Dersleri 15: Zamanlayıcı (timeIntervel, setTimeOut, requestAnimationFrame) […]
[…] […]