JavaScript を見直そう!アイデア次第でここまでできる!
JavaScript に眠る財宝=Ajax を掘り起こせ!
futomi の 2 冊目の著書が完成しました!Perl/CGI 本に続き、今度は Ajax (JavaScript) がテーマです。Webアプリケーション開発には欠かすことができない JavaScript を、Ajax という切り口で、実践的なサンプルを通して詳しく解説しました。サーバサイドのアプリケーション開発者だけではなく、ウェブデザイナーまでを巻き込むAjax手法は、ウェブに携わるすべての方に必須のテクニックとなっていくことでしょう。本書は、ある程度 JavaScript を使ったことがある方であれば理解できるよう、ステップバイステップで解説しています。ぜひ、あなたも Ajax を自分のものにしてください。
本書で解説しているサンプルスクリプトを、本コーナーにて公開しています。下の目次欄の [Sample Script] をクリックしてご覧下さい。
無限の可能性を秘めたAjaxという畑に、「新しいWebアプリケーション」という花を咲かせる「アイデアの種」を蒔くこと
――それが本書の仕事です。
Webページでも、ふつうのアプリケーションのような操作性を実現できたら便利になるのになぁ
と感じたこと、ありませんか? Webマスター、Webデザイナー、開発者など、Webページ作成に関わる人であれば、誰でも一度は感じたことがある疑問。
そう、われわれは、ブラウザの機能という制約に、知らず知らずのうちに縛られていたのです。
しかし近年、メジャーなブラウザーも進化を遂げ、さまざまな機能が実装されるようになりました。使い勝手の部分だけにとどまらず、開発者向けには、JavaScriptエンジンの強化が図られてきました。
そして、これまであまり使われてこなかった機能が、俄然注目を集めるようになりました。こうした機能の一つにXMLHttpRequestがあります。XMLHttpRequestを使えば、「JavaScriptから非同期にHTTP通信を行ない、WWWサーバと連携することで、ページ遷移をすることなく、部分的にダイナミックに表示を変化させ、ふつうのアプリケーションのような操作性を実現することができる」のです。
本書では、Ajaxの核となるXMLHttpRequestオブジェクトをはじめ、それに付随する DOM (Document Object Model) 、イベントハンドリングの解説から、実践的な Ajax Web アプリケーション作成までを網羅した Ajax 解説書の決定版です。本書は、Webアプリケーション開発技術者のみならず、Webデザイナー、ネットビジネスをプロデュースしているマネージャー、Webマスターを対象としています。JavaScriptやCSSの基礎をある程度学んだことがあれば、応用が効く数多くのサンプルを通して、ステップ倍ステップで、無理なく Ajax が理解できるように構成されています。
Imagination is more important than knowledge. Knowledge is limited. Imagination encircles the world.
- Albert Einstein想像力は知識よりも大切だ。知識には限界がある。想像力は世界を包み込むのだ。
- アルバート・アインシュタイン
こうして蒔かれた種が、あなたの想像力によって芽吹き、一つでも多くの、そして画期的なWebアプリケーションが誕生してくれることを願って。
本書で紹介しているすべてのサンプルコードは、こちらからダウンロードしてください。
ダウンロードしたら zip ファイルを解凍してください。source というフォルダーがございますので、このフォルダーをそのままご利用のウェブサーバにアップロードしてください。ウェブサーバにアップロードしたものでないと、正しく動作いたしませんので、ご注意下さい。source フォルダー内に index.html がございますので、ブラウザーでアクセスすると、各章で紹介したサンプルへのリンクページが表示されます。
function resizeImage(e) {...} の中
} else if(e.wheelDalta) {
} else if(e.wheelDelta) {
if(e.clientX && e.clientY) {
mouse_x = e.clientX;
mouse_y = e.clientY;
} else {
mouse_x = outframe_pos.x + Math.round( outframe.offsetWidth / 2 );
mouse_y = outframe_pos.y + Math.round( outframe.offsetHeight / 2 );
}
if(e.wheelDelta && e.clientX && e.clientY) {
mouse_x = e.clientX;
mouse_y = e.clientY;
} else {
mouse_x = outframe_pos.x + Math.round( outframe.offsetWidth / 2 );
mouse_y = outframe_pos.y + Math.round( outframe.offsetHeight / 2 );
}
本書発売時点(2005年12月)では、マウスホイールイベントから取得できるclientX, clientYプロパティーは、FireFox1.5の場合、0がセットされておりました。そのため、改訂前のスクリプトでも問題なく動作しておりましたが、2006年6月現在のFireFox1.5の最新版では、これらプロパティーに値がセットされるようになりました。しかし、実際のマウスポインターの座標ではない値がセットされてしまい、本サンプルが正常に動作しなくなりました。そのため、マウスポインターの座標を取得するコードに修正を加えました。
clientX, clientYプロパティーに0ではない値がセットされている場合にこれらプロパティー値をマウスポインターの座標として適用しておりましたが、これだけでは、FireFox1.5の最新版においても、clientX, clientYプロパティーの間違った値が適用されてしまいます。そのため、これらプロパティー値を適用する条件に、e.wheelDeltaが存在することを加えることで、FireFox1.5の最新版がこれらプロパティー値を適用することを回避しております。