Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2008年05月31日

Canvas で簡単な図形を描いてみる

Canvas で簡単な図形を描いてみる


直線,矩形,円を描くことができる.

mouseup するまでの間の途中段階も再現しようとしたけどなんかうまくいかないので見送り.

Untitled を使おうとしたんだけれども.


追記 6/1 17:20

線,塗りつぶしの色を変更できるようにした.

メモ

offsetX, offsetY は firefox で使えない.

layerX, layerY がそれにあたるとおもったんだけど違うのか?

仕方ないので clientX - offsetLeft, clientY - offsetTop で代用

2008年05月30日

printf もどき

function printArray(format, arry) {
    var i = 0;
    return format.replace(/%s/g, function($0) {
        return arry[i++];
    });
}

var a = ["foo", "bar"];
printArray("%s+%s", a); // foo+bar

そもそも printf がどんなものか詳しくはしらないのでそれっぽいやつ.

型とか関係なし.第2引数に配列をとって順に展開していく.

エラー処理がまったくないけどきにしない.


参考

はてなダイアリー

sleep

sleep := method(t, TimerEvent clone setTimeout(t) waitOn)

iolanguage で Addon 呼び出しってどうかくのだろうか?

上の例も先に Socket を呼んでおかないとエラーとなってしまうんだけど.

ただ単に

Socket
sleep := method(t, TimerEvent clone setTimeout(t) waitOn)

とすればエラーはでないけど,なんか変だし.

2008年05月16日

Number オブジェクトのメソッド呼び出しではまったこと.

数値のメソッド呼び出しは

3.toString(2);

では Syntax Error となる.

3..toString(2); // . を二つつける.

もしくは

(3).toString(2);

とする必要がある.


問題はここから.

まず,Math.abs を Number.abs でも呼べるようにする.

Number.prototype.abs = function() {
  return Math.abs(this);
}

これを . を二つつけるやり方で呼び出してみる.

-3..abs()
>> -3

ん.なぜと思ったけど

-(3).abs()

となってしまっているようだ.

(-3).abs();

負の数字の場合 () でくくってやる必要がある.


まぁほとんどこのようなことは書かないのではまることは少ないないけどメモ.

2008年05月15日

"先頭を0で埋めて桁をそろえる" を考えてみた

http://d.hatena.ne.jp/javascripter/20080514/1210791575 より

unshift で

Number.prototype.fillZero = function(n) {
    var r = this.toString().split('');
    while(r.length <= n) {
        r.unshift('0');
    }
    return r.join('');
}

2

Number.prototype.fillZero = function(n) {
    return Array((n+1) - this.toString().split('').length).join('0') + this;
}

小数や負の数の場合も考えて

if(this < 0 || (this - Math.floor(this) != 0)) return this;

を入れてもいいかもね.

2008年05月14日

<body onload="func()"> としたときの挙動.

http://orera.g.hatena.ne.jp/higeorange/20080514/1210740349

でいろいろと疑問に思ったのでまとめてみる.


まず検証ブラウザ.

Opera, Firefox, Konqueror

<body onload="func()"> としたとき

Opera

window.onload & window.document.body.onload に func を設定.

しかし window.onload に既になにかあれば window.onload に func を設定しない.

ここでわからないのが,window.onload を実行するか window.document.body.onload を実行するかということ.


Firefox

window.onload にfunc を設定.

window.onload の関数を実行


Konqueror

window.onload にfunc を設定.

window.onload の関数を実行


window.document.body.onload = func; としたときに実行するかどうか

Opera と Konqueror は実行した.

Firefox は実行しない.そもそも widown.document.body.onload は undefined.


結論

Opera の挙動は何かおかしい.

<body onload="func"> は避けるべき.

 |