忍者ブログ

(´゚д゚`)ンマッ!!

Ruby,JavaScriptについての備忘録として書きます。自分用です。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

HTML5のcanvasで、変換マトリックスを初期化する

html5のcanvasで、変換マトリックスを設定する関数の説明はたくさんあるのに、
それを初期化する関数がなかった。
rotateとかtransform,translateしたあとその変換マトリックスを初期化(つまりなにも変換しなくなる)する方法をメモ。

まず、変換マトリックスの実体は行列である。
変換する際、その行列を掛けて座標を計算していると考えられるので、単に単位行列を指定すればよい。

変換マトリックスを設定する関数はsetTransformなので、
その仕様に従って単位行列を作ると
setTransform(1,0,0,1,0,0)
こうなる。

つまり、context.setTransform(1,0,0,1,0,0)を実行すれば変換マトリックスは初期化され、なにも変換しなくなる。


参考
http://www.html5.jp/canvas/ref/method/setTransform.html
http://www.html5.jp/canvas/ref/method/transform.html
http://himaxoff.blog111.fc2.com/blog-entry-85.html

拍手[0回]

PR

リンクのhrefにjavascript:void(0)とする理由(javascript:hoge()としてはいけないのか?)

よく、ハイパーリンクにjavascriptをくわえる場合、
href="#"としたりhref="javascript:void(0);"としたり、または代替リンク先を指定してonclickにreturn false;を付けたりもする。

例1

リンク
リンク
// JavaScriptが無効になっていればhoge.htmlにアクセス。有効ならばhoge()を実行。
リンク

しかし、これを単に次のようにしてはいけないのだろうか。

例2
リンク

これなら例1の1つ目と2つ目と同じ動作をするはずだ。
代替リンクを設定する場合や複雑なJavaScritpを処理したい場合は例で良いと思うが、一般的に例2はあまり使われていない。
何か理由があるのだろうか?


ご存じの方がおられたら、コメントで教えてほしい。

拍手[0回]

JavaScriptでHEXをRGBに変換する(速度比較)

JavaScriptでカラーコードをHEXからRGBにしたり、その逆を行ったりすることは良くあると思います。
その際に"#"を削除したりと、何度か文字列処理を行います。
文字列処理は比較的重い処理なので、出来れば高速なメソッドを使用したいものです。

そこで、今回はどの方法が一番早いかを検証してみました。
今回検証したのは
・substrを使う方法
・replaceを使う方法
・split,joinを使う方法
です。

検証は、以下のプログラムで行いました。

t = "#ff8000";
c = 1000000;

function fnc1(){
	var h = t.substr(1,6);
	return parseInt("0x"+h);
}
function fnc2(){
	return parseInt(t.replace("#","0x"));
}
function fnc3(){
	return parseInt(t.split("#").join("0x"));
}

var st = (new Date()).getTime();
for(var n=0;n<c;n++){
	fnc1();
}
console.log("1: "+String((new Date()).getTime() - st));

var st = (new Date()).getTime();
for(var n=0;n<c;n++){
	fnc2();
}
console.log("2: "+String((new Date()).getTime() - st));

var st = (new Date()).getTime();
for(var n=0;n<c;n++){
	fnc3();
}
console.log("3: "+ String((new Date()).getTime() - st));
全体的にやっつけ感満載ですが、お許しを。

結果
1: 4426
2: 5347
3: 6324
となりました。
単位は全てms。

1が一番早いということで、
substrが一番高速だと言うことになりました。意外ですね。

もっともポピュラーなreplaceは2位。
全置換以外使い道がないと思われるsplit,jpinは3位でした。

拍手[0回]

コマンドラインで同じ行に何度も出力(print)する

よくインストーラ、gemとか使ってるとコマンドラインの文字が動的に変化しますよね。
Installing...(10%)の10%のところです。


printしたら横に流れるし、\nしたら次の行行くだけだし...
これが何故変化するかわからなかったので、気になって調べました。


答えは簡単。\nじゃなくて\rを使えばよかった。
そういえば\r\nは、タイプライター時代に\rで行頭に戻って、\nで次行へ移動。みたいな感じだったという話を聞いたことがあった(かもしれない)。

ということで、\rで先頭に戻って上書きすればおkでした。

\rする前の文字列より、\rしてからprintする文字列が短いと前の文字列が消えずに見えるので注意です。

拍手[0回]

JavaScriptで配列をそれぞれ処理する(forEach)

JavaやRubyには、配列を操作し、それぞれの要素を個別に処理するfor-each文がある。
Javaは詳しく知らないが、Rubyではa.each{}で使える。
そこで、JavaScriptにもないかと探していたところ、あまり情報がないようだがforEachというものがあった。

t = 0;
a = [1,2,1,2,1,2,1,1,1,3,10];
a.forEach(function(e){ t+=e;});
alert(t); // 25
使い方は簡単。
配列のforEachというメソッドを、処理する関数を引数にして呼びだすだけ。

しかし、ある一定の条件のとき処理をスキップしたい時がある。
その時は当然forのようにcontinueだろう・・・と思ったら違った。
正しくはreturn。
関数を抜けるのだから当然と言われれば当然だが、forという先入観でcontinueにしてしまった。
t = 0;
a = [1,2,1,2,1,2,1,1,1,3,10];
a.forEach(function(e){ if(e==2)return; t+=e;});
alert(t); // 19

拍手[1回]

Copyright © (´゚д゚`)ンマッ!! : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]

管理人限定

プロフィール

HN:
starlit
性別:
男性
自己紹介:
Ruby,JavaScriptでWebサービスとか作ったりしています。
こんなん作れば?とかもっとこうすれば?とかもあれば言ってください。

一緒になんか作ろうぜ!とか言う人は
是非メールなりなんなり送って下さい!

カレンダー

03 2024/04 05
S M T W T F S
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

ブログ内検索

最新CM

カウンター