setInterval() と setTimeout() の違いのメモ

タイマー処理の違い
http://dotinstall.com/lessons/basic_javascript_tips/2115
を参考に
setInterval() と setTimeout() の違いのメモ
setInterval()
これは、処理が終わったことを考慮しないため
1秒間隔で処理しようとすると
終わっていないのに追加処理させていくので
最後にはクラッシュする
なので、複雑なものは
setTimeout() を使う
こちらは終わっているかどうか考慮してくれる
単純なものなら
setInterval() でもOK
でもできるだけ
setTimeout() で書いた方が楽
1秒後とに1たすのを setInterval() なら
setInterval(function(){
console.log(++i);
},1000);
これを setTimeout() に書き換えると
function plusOne(){
console.log(++i);
setTimeout(plusOne,1000);
}
plusOne();
というようになる

即時関数と無名関数

即時関数と無名関数
#18 無名関数と即時関数で出来ること
http://dotinstall.com/lessons/basic_javascript_tips/2118
に解説がある
一回しか使わない、
もしくは即座に実行したい
または、書くのが面倒
そんなときに使えるのが
即時関数
ユーザ関数を
()
で囲って、最後に();
をつける
例えば
function helloworld(){
console.log(“hello world);
}
これを実行するには
通常なら
helloworld();
とするけど
即時関数にしたいのなら
(function helloworld(){
console.log(“hello world);
})();
というように
()で囲って、最後に();
をつけている
無名関数は
function (){
console.log(“hello world);
}
というように、関数の名前がないもの

診断結果の ツイート
http://dotinstall.com/lessons/shindan_js/4805
を参考に
結果をツイートする機能をつけてみる
これは今後もいろいろと応用できそう
Web Intents | Twitter Developers
https://dev.twitter.com/docs/intents
も参考にするとよりわかりやすい
まず、表示領域を div で作成
<div id=”tweet”></div>
処理は script タグの中に追記する
var tweetLink =”;
$(‘#tweet’).html(tweetLink);
var tweetLink =”;
の中へリンクの作成を追記する
これは、公式サイトのドキュメントに載っている
Web Intents を使う
URLは
https://dev.twitter.com/docs/intents
この中にある
Tweet or Reply to a Tweet
を使う
https://dev.twitter.com/docs/intents#tweet-intent
この中で使うURLが
https://twitter.com/intent/tweet?

使うオプションが
Web API ではおなじみの?のあとに
追加していくことができる
オプションについては
Supported Parameters
の項目にそれぞれの説明が英語で記載されている
これを元にコードを書いていく
今回はツイート機能なので
https://twitter.com/intent/tweet?text=投稿内容
というかんじになる
ただし、日本語そのままだと文字化けするので
encodeURIComponent()
でエンコードしておく必要がある
結果は
result に格納されているので
encodeURIComponent(result)
というようにする
今回はハッシュタグをつけているので
&hashtag=dotinstall
もつけているので
var tweetLink = ‘<a href=”https://twitter.com/intent/tweet?text=’+ encodeURIComponent(result) +’&hashtags=dotinstall”>ツイートする</a>’;
このままでも使えるけど、名前をいれなくても
できるという問題があるので、これを対処
この処理には
if () で判定する
if($(‘#name),val() ==”){
alert(‘名前を入力してください’);
return false;
}
関数の中で終わらせるには
return false;
を使う
これで 結果のツイート機能
そして入力チェックのできあがり

java script でキャラ診断

java script でキャラ診断
ドットインストールの
http://dotinstall.com/lessons/shindan_js
を参考にして、キャラ診断の作成
とはいっても、メインでやってみたいのは、後半の twitter で
診断結果を投稿するとこ
いくつかサンプルなどをつくるときに
楽をするためには
ベースとなるファイルをつくり、あとは使いまわすほうが楽
なので、base.html を作成し
ソースは
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<script src=”http://code.jquery.com/jquery-1.7.1.min.js”></script>
<title>タイトル</title>
</head>
<body>
</body>
</html>
あとは、これをコピーして使いまわす
<script src=”http://code.jquery.com/jquery-1.7.1.min.js”></script>
はjQuery をつかうのに必須
<input type=”text” id=”name” value=””>
<input type=”button” id=”shindan” value=”診断”>
というように診断ボタンを作成
診断ロジックは java script
<body style=”text-align:center;”>
とすれば、画面中央寄せのものができる
診断結果については
配列で指定する
var types =[‘勇者’,’魔法使い’,’戦士’,’遊び人’,’スター’,];
診断に使う名前は
var name =$(‘#name’).val();
で取得できる
診断ゲームなので、ランダム要素がほしいということで
var type =types[Math.floor(Math.random() * types.length)];
とする
.length とすることで、最大値を自動取得可能
Math.random() は
java script で乱数を発生させるもの
Math.floor() は小数点四捨五入
これで、配列の数値だけ取得できる
あとは、診断結果を作成
var result = name +’さんは’+ type +’です’;
これを表示するので
<p>ここに結果表示</p>
となっているのを
<p id=”result”>結果表示</p>
としておいて
java script の中で
$(‘#result’).text(result);
とすれば
id=”result” になっている部分を
text() の内容で書き換えてくれる
今回は result = 結果の内容なので
結果表示となっている部分が
診断内容に置き換わる
もし、うまく稼働しないときには
chrome で
Ctrl + Shift + i

develper tools を起動して
console タグを開くと
エラーがあればその内容が表示されているので
その部分を修正しやすくなります
次は、診断結果の追加
これは、単純に
var charas =[‘かっこいい’,’かわいい’,’クールな’];
というように
配列を用意して
var chara =charas[Math.floor(Math.random() * charas.length)];
というように
ランダムで要素取得できるようにすればOK
あとは、診断結果を追加するだけ
var result = name +’さんは’+ type +’です’;

var result = name +’さんは’+chara+ type +’です’;
というようにすれば、いろいろな判定をつけることができる

java script でストップウォッチ

java script でストップウォッチ
スタート
ストップ
リセットボタン
を作成
表示は div で作成
id=”set”
style=”fong size:120px”>0.0</div>
用はボタンの onclick=”関数”
として<script> のところにそれぞれの関数を記述しておけばOK
簡単に
setinterval を使って百ミリ秒ごとに0.1 足しているけど
正確なストップウオッチに比べると時間がずれる
これを回避するには0.1 足すのではなく
new Date().getTime() で
ミリ秒を取得し、start の時刻との差を取る用にする
setInterval(function(){
sec +=0.1;
document.getElementById(“set”).innerHTML=sec;
},100);
だけだとたまに変になる
一旦10倍にして四捨五入するようにして
1/10 にすればいい
round() は
四捨五入する関数
なので
setInterval(function(){
sec +=0.1;
document.getElementById(“set”).innerHTML=sec;
},100);

sec から
Math.round(sec*10)/10;
とすれば、見た目もすっきりする
こうしないと凄い桁数になっている
次にストップとリセット作成
var timerid ;
で宣言しておいて
function start() のところの
setInterval(function(){

timerId = setInterval(function(){
にする
あとは
function stop(){
clearInterval(timerid);
}
これでOK
次にリセット
function reset(){
document.getElementById(‘sec’).innerHTML=’0.0′;
sec =0.0;
}
とすればOK
innerHTML=’0.0′;
で表示を
0.0
に置き換えて
sec =0.0;
とすることで数値も初期化している

Javascript のサンプル

http://dotinstall.com/lessons/just_five_js/3001
を参考にアルゴリズムの勉強
必要なもの
<input type=”button” value=”start” onclick=”start();”>
<input type=”button” value=”stop” onclick=”stop();”>
<p id=”result”></p>
これでボタン、変化する領域ができた
getTimeで得られるのは1970/1/1から現在までのミリ秒
UNIXタイムのこと
getTime() のドキュメント
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTime
start = new Date().getTime();
でstart クリック時の時間取得
stop = new Date().getTime();
でstop クリック時の時間取得
とりあえず、デバッグするだけなので
developer tools を使うので
chrome で Ctrl +Shift +i で開いて確認
ここまできたら、結果算出
var diff = (stop -start)l;
これで、時間の差がでる
var FIVE_SECOND = 5 * 1000;
と定義しているので
var diff = FIVE_SECOND – (stop – start);
とすれば結果算出ができる
あとは、結果を
if else で分岐して表示できる
このときに、p id=”result” なので
これを格納する変数を用意する
var e = document.getElementById(“result”);
ument.getElementById(“result”);
そして分岐処理
表示内容は innerHTML で書き換えている
if(diff ==0){
e.innerHTML =’ぴったり’;
}else if(diff > 0){
e.innerHTML=(diff/1000)+’秒はやい’;
}else {
e.innerHTML =(diff/1000)+’秒遅い’;
}
というかんじ
これで実行してみてうごかない場合
developer tools を
Ctrl + Shift + i
で起動すると間違っていると思われる場所のエラーが
表示される

javascript オブジェクトの定義

java script オブジェクトの定義のメモ
まずは、コンストラクターの定義
オブジェクト名 = function(引数){
this.プロパティ = 初期値;
};
次に、メソッドの定義
オブジェクト名.prototype.メソッド = function(引数){
//メソッドの処理;
};
オブジェクトの利用のしかた
ob = new オブジェクト名(引数);
ob.プロパティ名=1;
a = ob.メソッド(引数);
あと、java script では
変数の宣言には
var をつかう

java script

ようやくubuntu に Google Chromeをインストールできましたので
日経Linux 2011 2月号に載っていた特集
HTML5 でつくるAndroid アプリ
を実線してみました
しかし、思わぬところでつまづきました
本には、HTML、CSSは載っているのですが
肝心の java script を実行するための
記述がHTMLがHTMLファイルにかかれていません
そのため、そのままタイプしても
起動しないということが判明しました
そこで
JavaScript の外部ファイル
を参考に
HTMLファイルの<head> から </head>
の間に、java script の外部ファイル読み込みの設定を行いました
<script type=”text/javascript” src=”sample.js”></script>
を追記します
全体のソースを記述すると
<!DOCTYPE html>
<html>
<head>
<link rel=”stylesheet” href=”sample.css” type=”text/css”/>
<script type=”text/javascript” src=”sample.js”></script>
</head>
<body>
<input type=”button” value=”button” onclick= “doItNow()” >
 <p class=”very_important” id= “msg”> here is message.</p>
</body>
</html>
というようになります
これで
Google Chrom でファイルを開き、
button
というボタンをクリックすれば、java script が機動します