requestAnimationFrame
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>requestAnimationFrame</title>
</head>
<body>
<div id="container">
<h1 id="letter">a</h1>
</div>
<script type="text/javascript">
var letter = document.getElementById('letter'),
framePerSecond = 10;
var requestAnimationFrame =
window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame;
var letters = "abcdefghijklmnopqrstuvwxyz".split('');
function cycleLetter(){
setTimeout(function(){
requestAnimationFrame(cycleLetter);
var curLetter, idx;
idx = Math.floor(Math.random() * letters.length);
curLetter = letters[idx];
letter.innerHTML = curLetter;
}, 1000 / framePerSecond)
}
cycleLetter();
</script>
</body>
</html>
cancelAnimationFrame
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>requestAnimationFrame</title>
</head>
<body>
<div id="container">
<h1 id="letter">a</h1>
</div>
<script type="text/javascript">
var letter = document.getElementById('letter'),
running = true,
requestID;
letter.addEventListener('click',stopAnimation,false);
var letters = "abcdefghijklmnopqrstuvwxyz".split('');
function cycleLetter(){
if(running){
var curLetter, idx;
idx = Math.floor(Math.random() * letters.length);
curLetter = letters[idx];
letter.innerHTML = curLetter;
}
requestID = requestAnimationFrame(cycleLetter);
}
function stopAnimation(){
cancelAnimationFrame(requestID);
}
cycleLetter();
</script>
</body>
</html>