画像を表示前に先に読み込む
例えばマウスオーバーさせたときにJavaScriptで画像を入れ替える場合は
<img src="sample1.jpg" onMouseOver="this.src='sample2.jpg'">
とかすればいいわけだけど、「sample2.jpg」はマウスオーバーした時に読み込まれるから、パッと画像が切り替わらないかもしれないね。
という時にやっておきたいのが画像の先読みというやつで、まだ出てきてない画像も先に読み込ましてやれば、マウスオーバーした時もすぐに画像が切り替わるという優れもの。
やり方は上の例の場合だと、スクリプト書くとこに
sakiyomi = new Image(); //画像オブジェクトを生成 sakiyomi.src = "sample2.jpg"; //画像ファイルを指定
とすれば良いだけで簡単でした。
僕はCSSでやっちゃうので、これはあまりやることないかもしれないね。
画像のサイズ
画像のサイズを変えるには
document.images["画像の名前"].width = 画像の幅; document.images["画像の名前"].height = 画像の高さ;
という指定をしてやる。
例えば、画像をクリックするたびに10ピクセルづつ大きくなるような、使用用途がなさそうなものを作るとすると
<html> <head> <title>画像サイズをクリックで大きく</title> <script type="text/javascript"> <!-- imageW = 200; //画像の幅の初期値 imageH = 100; //画像の高さの初期値 function kakudai() { imageW = imageW + 10; imageH = imageH + 10; document.images["sample"].width = imageW; document.images["sample"].height = imageH; } // --> </script> </head> <body> <p><img src="sample.jpg" id="sample" onClick="kakudai()"></p> </body> </html>
こんなかんじかな。
キーイベント
って確かまだやってなかったかな。
一応検索かけて出なかったので、まだだったと思います。
キーイベントって
- onKeydown : キーが押された
- onKeypress : キーが押されたまま
- onKeyup : キーが離された
とかあたり。
例えばbodyに
<body onKeydown="alert('何かキーを押したね')">
としてやれば、キーボードのボタンを何か押すたびに「何かキーを押したね」と出てこの上なくウザいものができますね。
もうちょっと使えるのが欲しいね。
eventオブジェクトのkeyCodeプロパティを使えば、どのキーが押されたのかをキー番号で教えてくれるらしくて、これは用途がありそうです。
<body onKeydown="alert(event.keyCode+'のキーを押したね')">
としてやれば、例えばAを押した時は「65のキーを押したね」と表示される。
これはAのボタンに65というキーコードが当てられているからだけど、これではちょっと分かりにくい。
そこで、これをちゃんとAとして返してくれるのがString.fromCharCodeというもの。
<body onKeydown="alert(String.fromCharCode(event.keyCode)+'のキーを押したね')">
これでAを押したら「Aのキーを押したね」と表示される。
あーでもアルファベットと数字以外はちゃんと返してくれないみたい。
その他、特殊なキーとして
- event.ctrlKey : Ctrlキーが押されたかをtrue、falseで返す
- event.shiftKey : Shiftキーが押されたかをtrue、falseで返す
- event.altKey : Altキーが押されたかをtrue、falseで返す
などもある。
というか他にもいっぱいあって、event.keyCodeはonKeydownやonKeypressと得られる値が違ったりしていたり、何かと複雑みたい。
使う時に調べたほうがよいね。
ブラウザとかの判別
2冊目になると、1冊目で覚えたものは書くこともないなぁと思っていたのですが、ブラウザを判別するというものがあり、これは前になかったのでメモしておこうかと思います。
というのも、1冊目のマウスイベントの時とかはIEで動いたけど、Firefoxでは動かなかったということもあるので、これは後々ブラウザの振り分けが必要だろうと思ったわけです。
このブラウザの判別はnavigatorオブジェクトというものを使うようです。
例えば、ブラウザの名前を出す場合は
navigator.appName
で簡単に出せます。
ただしFirefoxだと「Netscape」と出てしまいますね。
同じ系列のブラウザだからこれはしょうがないのかもしれません。
このnavigatorオブジェクトは
- appCodeName : コード名
- appName : ブラウザ名
- appVersion : ブラウザのバージョン
- userAgent : 色々情報の詰め合わせ
などがあります。
今まで覚えたことだけで簡易的なブラウザ判別をするとなると
function hanbetsu() { if (navigator.appName=="Netscape") { alert("Netscapeだね!"); } else if (navigator.appName=="Microsoft Internet Explorer") { alert("IEだね!"); } else { alert("その他だね!"); } }
という感じで、一応いけた。
動作するので、合ってることは合ってるようです。
マウスイベントで適当に遊ぶ
リンクテキストにマウスを重ねたときにテキストカラーを変えるのはCSSでよくやるもので、このサイトでも「濃い目のレッド→ピンク」に変わるようにしています。
これはCSSで
a { color: #c03; } a:hover { color: #f06; }
というように :hover を後に付けて指定してやれば簡単にできます。
この :hover は、僕の使っているFirefox(2.0.0.6)だとdivボックスにも使えます。
div { color: #ccc; } div:hover { color: #ddd; }
とすると、Firefoxだとdivボックスにマウスを重ねたときに色が変わります。
でも、IEは未対応のようで、最新のIE7でもダメなようです。
多くの人に見てもらいたいような演出の場合、これは使えません。
でもこれ、JavaScriptで作ってやるとIEにも対応できますね。
にわか仕込みのJavaScriptで申し訳ないのですが、勉強ということで、自分で考えて書いてみました。
<html> <head> <title>divボックスにマウスを重ねて色変更</title> <script type="text/javascript"> function over() { box.style.background="#ddd"; } function out() { box.style.background="#ccc"; } </script> </head> <body> <div id="box" style="background:#ccc;width:300px;height:300px;" onMouseOver="over()" onMouseOut="out()"> ここにマウスを乗せると色が変わるよ! </div> </body> </html>
一応できた。
divボックスに onMouseOver と onMouseOut のマウスイベントを仕込んだだけだけど。
というかこれ、別にfunctionとかしなくても
<html> <head> <title>divボックスにマウスを重ねて色変更</title> </head> <body> <div id="box" style="background:#ccc;width:300px;height:300px;" onMouseOver="this.style.background='#ddd'" onMouseOut="this.style.background='#ccc'"> ここにマウスを乗せると色が変わるよ! </div> </body> </html>
というかんじで、divボックス内に全部おさめることもできるんだね。
たぶん、全部外部に書くこともできるのかもしれないけど、今はわかりませんね。
今日から
はてなダイアリー市民というのになったみたいです ヽ(´ー`)ノ
なんかメール来てました。
プロフィールページの一番下「はてなダイアリー登録情報」のところに割り込まれていました。
はてブ
始めました。
- ブックマーク たんたんとん
- http://b.hatena.ne.jp/fue-fue/
はてな界隈で見つけた、JavaScript関連の記事をブクマしていこうかなと。
CSSをちまちまいじりまして、この日記とデザインも合わせたりしました。