LoginSignup
0
0

More than 3 years have passed since last update.

イメージマップで鍋をつつく。

Last updated at Posted at 2020-12-09

あらすじ

画像に色々埋め込みたくなったので、イメージマップ使ってみました。

インデックス

目指すもの

今回使う画像はこちら。
image.png
この美味しそうな水炊き鍋の「鳥肉」と「豆腐」にホバーしたら文字が表示されるようにします。

イメージマップを作る

領域を指定する

この作業が一番大事かつ一番めんどいです!
簡単にやる方法求む。

今回は HTML Imagemap Generator を使いました。
https://labs.d-s-b.jp/ImagemapGenerator/

image.png

右上で描きたい図形をクリックして、それとなく領域を指定します。
すると、 coord 要素が算出されます。

レスポンシブデザインに対応する

レスポンシブデザインのページの場合、イメージマップがズレます。
( 試しに width: 50vw; とか指定してみると分かります。 )

ので、再計算してくれるプラグイン ( jQuery-rwdImageMaps ) を利用します。
https://github.com/stowball/jQuery-rwdImageMaps

README に従ってスクリプトを追加します。

ホバーしたら文字を出す

area 要素をホバーしたら div に入った title が表示されるようにしました。

こんな感じの index.html になりました。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title>Clickable Map</title>
  </head>
  <body>
    <img
      src="img/food_nabe_mizutaki.png"
      usemap="#img3"
      alt="水炊き"
      id="img3"
    />
    <map name="img3">
      <area
        shape="poly"
        coords="141,243,168,261,182,255,206,267,222,258,248,265,270,252,301,245,311,235,306,222,330,216,336,201,328,184,313,186,304,178,281,183,271,175,255,177,237,155,211,160,206,165,195,158,175,163,170,181,154,188,155,216,140,227,140,245,170,262,208,233"
        href="#鳥肉"
        title="鳥肉"
        alt="鳥肉"
      />
      <area
        shape="poly"
        coords="228,149,254,129,265,131,288,115,338,131,340,168,317,181,310,183,299,175,279,179,264,171,255,174,255,174"
        href="#豆腐"
        title="豆腐"
        alt="豆腐"
      />
    </map>
    <script src="jquery-3.5.1.min.js"></script>
    <script src="jQuery-rwdImageMaps/jquery.rwdImageMaps.min.js"></script>
    <script>
      $(document).ready(function (e) {
        $("img[usemap]").rwdImageMaps();
      });
      $("area").hover(
        function () {
          $(this).append(`<div>${$(this).attr("title")}</div>`);
        },
        function () {
          $(this).find("div:last").remove();
        }
      );
    </script>
  </body>
</html>

jQuery 弱者なのでコードの汚さは許して...

完成品

imagemap_hover.gif

鍋が食べたくなりますね!

まとめ

いつもながら先人ありがとう!
領域指定をもっと楽にする方法考えたいところ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0