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);
}
というように、関数の名前がないもの

HTML5 でメモ帳作成 その2

HTML5 でメモ帳作成 その2
今回は
http://dotinstall.com/lessons/memo_html5/2304
を参考に、ページを読み込んだら
前回保存した内容を表示するというもの
これはメモ帳として最適な機能だと思う
追加された内容は
java script で
if で localStorage にデータ格納の有無を判定して
中身があるなら
getItem() で読み込んで表示するというもの
if(localStorage.getItem(‘memo’){
$(‘#memo’).val(localStorage.getItem(‘memo’));
}
これにより。
id=”memo”
となっているテキストエリアに、
前回保存した内容が読み込まれて表示される
jQuery で
val() は値を示す関数
これで、自動読み込みはできるので
内容の消去も実装
これは消去ボタンと紐付ける
$(‘#clear’).click(function(){
$(‘#memo’).val(”);
localStorage.removeItem(‘memo’);
});
これで、消去できる
$(‘#memo’).val(”);
で id=”memo” のテキストエリアの内容を空で上書き
そして
localStorage.removeItem(‘memo’);

localStorage の内容を削除
これで、再読込してもなにも表示されなくなる

HTML5 でメモ帳作成
http://dotinstall.com/lessons/memo_html5/2301
を参考に、メモ帳を作成
最終的には自動保存機能を実装する
これはHTML5の機能
localStorage を使う
今回は jQuery を使うので
<script src=”http://code.jquery.com/jquery-1.6.4.min.js”></script>
で読み込んでおく
あと、テキストエリアを使うので
textarea を使う
これについては
#11 テキストの入力
http://dotinstall.com/lessons/basic_html/311
が参考になる
rows は行数
つまり高さのようなもの
cols は横の文字数
つまり幅
canvas における
htight = row
width = cols
というかんじ
<textarea id=”memo” rows=”10″ cols=”40″ name=”memo”></textarea>
なら
縦10行
横40文字
ということになる
localStorage は制御は
java script で行う
保存には
localStorage.setItem()
読み出しには
localStorage.setItem()
セットした内容を一括削除するには
localStorage.clear()
指定して削除するなら
localStorage.remove()
ただし、ブラウザがHTML5のWeb Storage 対応でないと使えないので注意
実際に使う時には
ボタンクリックとかで保存することがおおい
なので、
$(‘#save’).click(function(){
localStorage.setItem(‘memo’,$(‘#memo’).val());
console.log(localStorage.getItem(‘memo’));
});
これで、実行して保存ボタンをおすと
develper tools で
console で確認すると
保存した文字が見える
developer tools の起動方法は
chrome で
Ctrl + Shift + i で起動
これができたら、ページ読み込んだらデータを表示する

診断結果の ツイート
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;
とすることで数値も初期化している

PHP でクイズ作成

http://dotinstall.com/lessons/quiz_php/1801
を参考にクイズ作成
arrayにクイズを格納
question に問題
options にクイズの選択肢
answer には正解
でOK
ソースにすると
$quiz = array(
‘question’=>’百式は何色?’,
‘options’=>array(‘赤’, ‘青’, ‘金’, ‘銀’, ‘黒’),
‘answer’=>2);
クイズの問題は echo で出力
回答するためのフォーム作成
選択肢は foreach() で表示
<p>Q: <?php echo $quiz[‘question’];?></p>
<ul>
<?php foreach ($quiz[‘options’] as $option) :?>
<li><?php echo $option;
?></li>
<?php endforeach;?>
</ul>
これで
<?php echo $quiz[‘question’];?>

問題が表示される
foreach ($quiz[‘options’] as $option)
で配列内容を1つずつ
$option に代入しながら終わるまでループする
<li><?php echo $option; ?></li>
となっているので
ループが終わるまで
リストが作られ続ける
すると




というようになる
このやりかたはAPI関連でリスト表示するときによくつかう
youtube とかお店リストとか
でクイズなので、ラジオボタンをつける
<input type=”radio” name=”answer” value=”<?php echo $key; ?>”>
これでラジオボタンがでる
さらに、回答の番号も把握したいので
foreach ($quiz[‘options’] as $option)

foreach ($quiz[‘options’] as $key=>$option)
にする
これで、1とかの番号がつくようだ
$key=>$option
にすることで
配列の関係にできる
つまり、キーと値の関係ができる
これもAPIでよく使う
そしてクイズの回答判定
送っているのはPOSTなので
判定をif で行う
if($_SERVER[“REQUEST_METHOD”]==”POST”)
まずは、これでPOSTか判定している
次に、回答と答え合わせ
これは三項演算子を使う
$message =($_POST[‘answer’]== $quiz[‘answer’])?”正解”:”不正解”;
これでOK
三項演算子は
(条件)? true の時の処理 : false のときの処理 ;
というかき方をする
これで、もし答えが間違っているなら
$message の中身は 不正解
$_POST[‘answer’]== $quiz[‘answer’])
であるなら、
$message の中身は 正解
というようになる
$quiz[‘answer’]

$quiz = array(
‘question’=>’百式は何色?’,
‘options’=>array(‘赤’, ‘青’, ‘金’, ‘銀’, ‘黒’),
‘answer’=>2);
の answer のことで
$_POST[‘answer’]

<form action=”” method=”post”>
の中で選んだラジオボタンの答えになる
そして、定番だけど
PHP で 出力するには
echo でできるので
echo $message;
とすれば
正解か不正解か表示されるというもの
最後に
exit するのを忘れずに
次はクイズの選択肢をシャッフル
これは
shufle() を使う
クイズの選択肢をシャッフルしたいので
shuffle($quiz[‘options’]);
でOK
三項演算子は
(条件)? true の時の処理 : false のときの処理 ;
というかき方をする
これで、もし答えが間違っているなら
$message の中身は 不正解
$_POST[‘answer’]== $quiz[‘answer’])
であるなら、
$message の中身は 正解
というようになる
$quiz[‘answer’]

$quiz = array(
‘question’=>’百式は何色?’,
‘options’=>array(‘赤’, ‘青’, ‘金’, ‘銀’, ‘黒’),
‘answer’=>2);
の answer のことで
$_POST[‘answer’]

<form action=”” method=”post”>
の中で選んだラジオボタンの答えになる
そして、定番だけど
PHP で 出力するには
echo でできるので
echo $message;
とすれば
正解か不正解か表示されるというもの
最後に
exit するのを忘れずに
次はクイズの選択肢をシャッフル
これは
shufle() を使う
クイズの選択肢をシャッフルしたいので
shuffle($quiz[‘options’]);
でOK
あと、配列をシャッフルするのに2だと答えがおかしいので
answer=>2
から
answer=>’金’
というようにする
あと、変更に伴い、配列の添字にしている
$key じゃなくて $option になるので
これも変更
<li><input type=”radio” name=”answer” value=”<?php echo $key;?>”>
から
<li><input type=”radio” name=”answer” value=”<?php echo $option;?>”>
<?php foreach ($quiz[‘options’] as $key=>$option) :?>

<?php foreach ($quiz[‘options’] as $option) :?>
となる

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
で起動すると間違っていると思われる場所のエラーが
表示される

Google Feed APIで使える、特定の語句を含むフィードの検索機能

http://dotinstall.com/lessons/basic_google_feed_api/9105
を参考に、google feed api の実践
今回はフィード検索機能を使う
いままでは、URLを指定していた
でも、これだとURLがわからないと使えない
なので、改良
var query =”ドットインストール”;
構文は
google.feeds.findFeeds(
検索キーワード,
コールバック関数
);
今回は
google.feeds.findFeeds(
query,
function(result){}
);
となる
コールバック関数には、結果が result になって
返ってくるので
if でエラーチェックする
if(!result.error){
console.log(result);
}
これで、chrome develoer tools で開くと
コンソールの中でURLの確認ができる
この中の
entries->0->url のところにURLが格納されている
ドットインストールの場合は
http://dotinstall.com/lessons.rss
となっている