イメージマップでhoverを実現する

Fxの拡張ではAutoCopyがお気に入りです。agoです。

今回はリニューアルしたwww.kayac.comからKAYACスタイルのページをご紹介したいとおもいます。

このページはぱっと見特殊な処理はないんですが、よく見ると画面下部の画像が斜めに切れており、それぞれ切れた領域ごとにhoverしているのがわかると思います。

ここでは背景の枠部分はimagemapを使用しており、その上の矢印、数字、タイトルはposition:absoluteで別のimgを浮かしています。 (KAYACサイトは曜日ごとに画像の色が変わるため、すべてを一枚の画像にして入れ替える実装は除外しました)

当初ここでは単純に$(‘area’).hover()でイベントを取っていたのですが、areaの上に浮いているimgにマウスが乗った時には画像を切り替えない処理が必要になり、その部分の判定を行う必要がありました。

通常であればevent.targetでイベントの発生元を取得し、画像要素であればmouseoutを無視する処理でいいんですが、なぜかarea上のimgのに限ってevent.targetがareaを指してしまい判断ができません。

そこで各ブラウザ毎にEvent Objectを解析したところ、IE、safariではevent.toElement、FxではEvent.relatedTargetでimgを取得できました。

imagemapでhoverという、非常にニッチなJSを作成する場合ご注意ください。

カヤックではflashなら30秒でできることにあえてJSで挑戦する技術者を募集しています! (最初はJSでもすぐできると思ってたんですが。。。)