document.observe('dom:loaded', function() {
var clickableMap = $('clickable_map');
//タブキーのデフォルトアクションを禁止する
document.observe('keydown', function(e) {
// Mozilla(Firefox, NN) and Opera
if (typeof event == 'undefined') {
var code = e.which;
if (code == Event.KEY_TAB)
e.stop();
// Internet Explorer
} else {
var code = event.keyCode;
if (code == Event.KEY_TAB)
e.stop();
}
});
//クリッカブルマップの各データを変数imageDataにオブジェクト形式で格納します
//マップの領域判定にはez-HTMLというフリーソフトを利用しました
var imageData = {
name: 'japanese-style',
url: 'image/background/japanese-style_beiz.jp_S08248.jpg',
mapArea: {
shape: 'poly',
coords: '53,189,238,335,327,314,402,337,591,194,558,128,
477,56,391,23,245,25,151,67,87,130,53,189'
}
};
clickableMap.insert({
top: '',
bottom: ''
});
//map要素でname属性が"japanese-style"の要素にイベントハンドラを登録
$$('map[name=' + imageData.name + '] area').first()
.observe('click', function(e) {
e.stop();
alert('クリッカブルマップをクリックしました!');
})
.setStyle({ cursor: 'pointer' });
});
まず、タブキーが押されたときのみデフォルト・アクションを禁止し、リンクがフォーカスされないようにしています。
次にあらかじめイメージマップの形や領域の座標などを変数にオブジェクト形式で保存しておきます。座標を判定するのにez-HTMLというフリーソフトを利用しました。そして、Prototype.jsのinsertメソッドを使って、IMGタグとMAP/AREAタグをHTML上に流し込みます。(DOMで要素を作るとなぜかIEのバージョンによって動作しませんでした)
AREAタグにはhref属性を設定せず、代わりにonclick時のイベントハンドラを登録。hrefに例の”javascript:void(0)”と入れる必要がないので、ステータスバーにも余計な情報が出なくなり、ページが遷移することもありません。
Internet Explorer 6-8 Firefox3.5 で動作確認しました。