setTimeout関数のメモ。
テキストを一文字ずつ表示する必要がありsetTimeout関数について調べたメモ。
timeoutID = window.setTimeout(func, delay[, param1, param2, …]);
IE7, 8は引数param1, param2, …を渡せない。コールバック関数をクロージャーにしプロパティを追加して解決。
» jsFiddle
/** * typo.js * * It displays one character at a time. * * Copyright 2012 Sawai Hiroshi * http://www.info-town.jp * */ /** * typographic object */ var typo = {}; // implement typo object (function() { <pre><code>/** * transform string to array * * @private * @param {String} text * @return {Array} arr */ function _strToArr(str) { var arr = []; for (i = 0; i < str.length; i++) { arr.push(str.charAt(i)); } return arr; } /** * insert text to dom * * callback of setTimeout * * @private * @param {jQuery} elem * @param {String} text * @param {Number} timer_id Timer ID */ function _insert(text, elem) { // argument elem, text is free variable return function _callback() { elem.innerHTML = text; // insert text clearTimeout(_callback.timer); }; } /** * rendering text used timer * * @private * @param {Array} arr * @param {jQuery} elem */ function _rendering(text, elem) { var arr = _strToArr(text), timer = [], text, _timercallback, i; for (i = 0; i < arr.length; i++) { text = arr.slice(0, i + 1).join(''); _timercallback = _insert(text, elem); _timercallback.timer = setTimeout(_timercallback, i * 100); } } typo.rendering = _rendering; </code></pre> }()); var elem = document.getElementById('foo'); typo.rendering('It displays one character at a time', elem);
<html> <body> <p id="foo"></p> </body> </html>
» Demo
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。