JavaScript

JavaScriptで物理シミュレーション

Box2DFlashAS3というAS3用の物理シミュレータがあるわけですが、「同じECMAScriptだし、ASを少し置換すればJSでも動くんじゃね?」と言う単なる思い付きを実行してみたら、あっさり動きました。 まさかホントに動くなんて、正直自分でもびびった。 まぁ、あ…

prototype.js使って作ったクラスの属性の初期化

参照を持つ属性はinitialize関数の中で初期化しないと駄目なんすね。 <html> <head> <script src="prototype-1.6.0.2.js"></script> <script> /* * この定義はよくない */ (Ng=Class.create()).prototype = { initialize: function() {}, arr: [0, 0] }; Ng.test = function() { var ng1 = new Ng(); var ng2 = new Ng(); // </head></html>…

JavaScriptでGETパラメータを取れるんすね

知らんかったっす。取り方 window.location.search とりあえず関数にしとく function getParams() { var params = {}; var search = window.location.search; if (search != '') { var assocs = search.substring(1, search.length).split('&'); for (var i …

Railsで色選択ダイアログを使う

いくつか試してこれが一番良さそうだったのでメモ。http://www.knallgrau.at/code/colorpicker以下、Railsでの使い方。上のをダウンロードして次のように配置 public + images + blank.gif + hline.png + hue.png + picker.png + pickerbg.png + select.gif …

大文字とか小文字とか

window.attachEvent('onLoad', observer); がIEでうまく動かなくて悩んでたんだけど。 window.attachEvent('onload', observer); こっちが正解だった。以前は大文字が正解だったのに、今度は小文字か・・・。 IEやっぱ辛いな・・・

配列をランダムに並び替え

ふと思いついてやってみたけど、どうなんだろこれ。 function randomSort(ary) { var condition = function(){ return [-1, 0, 1][Math.floor(Math.random() * 3)]}; return ary.sort(condition).reverse().sort(condition); } ちょっと見たところいい感じに…

高度に進化したJavaScriptはFlashと見分けがつかない

AoR提出用にRails+JavaScript+ShootingStarでちょっとしたゲーム作ったりしてるんだけど*1、「これFlash使った方がよくね?」という内なる声と戦うのが非常に辛い。実際問題、いま自分がJavaScriptを選択してるのって「今までFlashやったことないし・・・」…

ランダムな色

var color = "#" + Math.floor(Math.random() * 0xffffff).toString(16);

JavaScriptのスコープとバインディングを理解する

http://alternateidea.com/blog/articles/2007/7/18/javascript-scope-and-binding JavaScriptのスコープとバインディングを理解する バインディングのキモは、それが実行スコープ −関数xはオブジェクトyのスコープで実行される、とか− をコントロールする手…

Array#join

Array#joinは引数なしだと「,」で繋ぐのか。空文字かと思ってた・・・

JSを使用してIEで動的にクリッカブルマップを作成するときは

属性名としてusemapではなくてuseMapを使わなければならない模様。むちゃくちゃ嵌った。つーか分かんないよ、そんな自分ルール使われても。嫌がらせとしか思えない。

IEでname属性を設定する

動的にクリッカブルマップを作りたくて var mapElm = document.createElement('map'); mapElm.name = 'map-name'; とかやったんだけど、IEだとどうもうまく行かない。FireFoxもSafari(Win/Mac)もOperaも大丈夫なのに。んで、今日その存在を知ったIE用のDOMイ…

ダイアログを動的に作成する

DojoのサンプルでHTML側にテンプレートを用意してダイアログを開く方法は説明されてるんだけど、テンプレートも含めてJavaScriptから動的にダイアログを作成する方法がよく分からなかったので調べてみた。ダイアログ作成時のオプションに toggle:"fade" が入…

Dojo on Rails

RailsでDojoを使う。http://dojotoolkit.org/downloadsからDojoの最新版をダウンロード。http://dojo.jot.com/WikiHome/HelloWorld#SettingUpDojoを参考に、 public/javascripts の下に dojo ディレクトリを作って、展開したファイルを置く。 \--public | \-…

invalid label

サーバでオブジェクトをto_jsonして送り、 headers['Content-type'] = 'text/javascript; charset=utf-8' render :text => record.attributes.to_json それをクライアントで eval したら var result = new Ajax.Request(url, requestOpt); eval(result.trans…

Drosera

SafariでのJSデバッグにDroseraがとてもよさそうなのですが、Safariで表示できないのに、WebKitでは正しく表示される場合はどうすればいいのか・・・。

現在位置で可能な最大のズームレベルを取得する

// map:GMap2 map.getCurrentMapType().getMaximumResolution(map.getCenter()) [追記] これでは駄目みたいでした。 Google Groupes getMaximumResolution was never related to what map tiles were available on the server, it only ever returned the ma…

まちがいさがし

どこが間違っているでしょう。 document.images[i-1].style.border = "3px solid white;" 答えセミコロン document.images[i-1].style.border = "3px solid white"; FireFoxさんはよしなに計らってくれるけど、IE先生は許してくれない。

再帰

ファーストクラスオブジェクトとして宣言した関数は再帰的に呼び出せるんだろうか、と疑問に思ったので試してみた。 <html> <head> <script> var myLoop = function(array, func) { if (array.length != 0) { func(array.shift()); myLoop(array, func); } } </script> </head> <body> <button onclick="myLoop([0,1,2], alert);">test</button> </body> </html> 成功。 ア…

引数で省略可能なオプションを渡す方法

scriptaculousのdragdrop.jsから。 引数がなければデフォルト 引数があればデフォルトを上書き add: function(element) { element = $(element); var options = Object.extend({ greedy: true, hoverclass: null, tree: false }, arguments[1] || {});

SortableでonUpdateを使うとき × <li id="item-1"> ○ <li id="item_1"> デフォルトではidにポジションを埋め込む際、-(ハイフン)ではなく_(アンダースコア)で区切る このルールはcreate時の引数で変更できて、例えば以下のようにすればハイフン区切りになる var rule = /^[^_\-](?:[A-Za-z0-9</li></li>…