【jQuery】【HTML】画像内の特定の箇所をクリックすると、説明文を動的表示
画像内の特定の箇所をマウスオーバーすると、説明文が表示されるコードのサンプル
areaタグの押下をjQueryで捉え、divタグをoffsetで移動させて動的に文章を表示させます。
- 中身空っぽのdivタグを、あらかじめ用意しておきます。
このとき、display:none;は設定しません。
これは、下記で挙げるoffset関数による位置変更が、透明な要素に対しては適用されないからです。
中身空っぽにしておくことで疑似的に透明っぽく見せておきます - 対象となるimgタグにはmapとareaタグを用意します。
areaタグ押下をjquery側ではclick関数で拾い、
上記の「中身空っぽのdiv」に中身を動的に詰め込んで、
offset関数でareaタグ付近に移動させます。 - 移動の際、areaタグに指定してあるcoords要素(area自身を定義している範囲)から、
divタグの表示位置を「area自身の右下」にするようoffsetの引数を調整します。
coodrs属性はカンマ区切りで設定されているので、
四角形のエリアである場合、「右下」は、2番目と3番目の要素となります。 - area以外の範囲の画像部分をクリックした場合、
表示している説明文を空っぽにしてリセットさせます。
こうしないと、表示された説明文が延々残って邪魔なので。
HTMLはこんな↓かんじ
<div id="imagePopup"></div> ←これが「中身空っぽのdiv」
<img src="20180419_test_img.jpg" usemap="#test">
<map name="test"> ↓指定しているareaは2か所
<area class="img-map-area" id="img01_01" shape="rect" coords="32,28,108,82">
<area class="img-map-area" id="img01_02" shape="rect" coords="179,15,210,68">
</map>
jQueryはこんな↓かんじ
<script type="text/javascript">
$(function(){
var textDiv = $("#imagePopup");
<span style="color: green;">// areaタグ押下時に説明文を表示</span>
$(".img-map-area").hover(function(){
var elementId = $(this).attr("id");
<span style="color: green;">// area右下を指定</span>
var coords = $(this).attr("coords").split(",");
var dispTop = coords[3];
var dispLeft = coords[2];
textDiv.text("");
textDiv.css("position","absolute").css("background-color","white").css("font-weight","bold");
textDiv.offset({top:dispTop, left:dispLeft});
var appendText = "";
if (elementId == "img01_01") {
appendText = "信じなくていいよ そんな悲しいニュースを<br/>燃やしてしまうよ きれいな火を出して<br/>" ;
} else {
appendText = "DANCE IN THE SHADOW THE WYVERN FLYING<br/>IT'S LIKE DFFERENT DEMENSIONAL COLOR<br/>SING IN THE SHADOW THE WYVERN BREATHING<br/>IT'S LIKE DEFERENT DEMENSIONAL SOUND";
}
textDiv.append(appendText);
});
<span style="color: green;">// area外の画像部分クリック時、説明文をクリア</span>
$("img").click(function(){
textDiv.text("");
});
});
</script>
実演は以下↓
左上の六角形(ID=img_01_01)をクリックしたとき↓
右上の六角形(ID=img_01_02)をクリックしたとき↓