本篇分享 image map 影像地圖的基本介紹、如何用工具快速建立 image map,以及動態改變 image map area coordinates。

什麼是 Image Map?該如何使用?

Image Map 是一個可以讓單張圖片切割成不同點擊區域,每個區域導向不同連結的切版方法。

矩形範圍

首先介紹矩形點擊範圍,拿最近熱門的駭客任務角色圖片來示範:

如何建立 RWD 的 Image Map 影像地圖?

如果想要讓使用者點擊每個角色的圖片可以導向演員的 wiki 頁面,可以在 html 中這麼做:

Step 1:在 img 中給定參數 width = 1280,height = 720,並預先給定 usemap = “#map-1″,連接等等要建立的 image map

<img class="block" width="1280" height="720" usemap="#map-1" src="./matrix.jpg">

Step 2:找出每個角色的「左上角」和「右下角」的 x, y 座標值 ,從左到右依序是

role 1: (1, 0), (319, 720)
role 2: (320, 0), (639, 720)
role 3: (639, 0), (962, 720)
role 4: (962, 0), (1280, 720)

Step 3:緊接著在 img 下面建立 map,map 裡面

  1. 建立一個 area
  2. shape 填入 rect ,設定為矩形
  3. 依序填入 role 1 左上角和右下角的座標到 area 的 coords,彼此用逗號分格
  4. href 填入點擊後要跳轉的頁面 url
<map name="map-1">
  <area coords="1,0,319,720" shape="rect" href="https://zh.wikipedia.org/wiki/%E5%9F%BA%E5%8A%AA%C2%B7%E9%87%8C%E7%BB%B4%E6%96%AF">
</map>

這樣就能建立一個覆蓋 role 1 的矩形點擊範圍,如下面半透明紅色

如何建立 RWD 的 Image Map 影像地圖?

Step 4:其他區塊依樣畫葫蘆,最終如下

<img class="block" width="1280" height="720" usemap="#map-1" src="./matrix.jpg">
	
<map name="map-1">
  <area coords="1,0,319,720" shape="rect" href="https://zh.wikipedia.org/wiki/%E5%9F%BA%E5%8A%AA%C2%B7%E9%87%8C%E7%BB%B4%E6%96%AF">
  <area coords="320,0,639,720" shape="rect" href="https://zh.wikipedia.org/wiki/%E5%87%B1%E8%8E%89-%E5%AE%89%C2%B7%E6%91%A9%E7%B5%B2">
  <area coords="639,0,962,720" shape="rect" href="https://zh.wikipedia.org/wiki/%E8%91%89%E6%B5%B7%E4%BA%9E%C2%B7%E9%98%BF%E5%B7%B4%E6%9D%9C-%E9%A6%AC%E6%B1%80%E4%BA%8C%E4%B8%96">
  <area coords="962,0,1280,720" shape="rect" href="https://zh.wikipedia.org/wiki/%E5%96%AC%E7%B4%8D%E6%A3%AE%C2%B7%E6%A0%BC%E7%BE%85%E5%A4%AB">
</map>

用瀏覽器跑起來看看,確認點擊角色區塊都能跳到對應演員的 wiki 頁面

統整起來,Image Map 的基本結構如下

<img src="圖片網址" width="圖片寬度" height="圖片高度" usemap="#影像地圖名稱">
<map name="影像地圖名稱">
 <area shape="點擊範圍形狀" coords="範圍座標" href="連結">
</map>

rect 座標語法如下

<area shape="rect" coords="左上 x, 左上 y, 右下 x, 右下 y" href="超連結">

除了上面介紹的 rect 矩形範圍之外,還有另外兩種形狀可以選擇

圓形範圍

語法如下

<area shape="circle" coords="圓心 x, 圓心 y, 半徑 r" href="超連結">

用圓形範圍覆蓋角色的頭部,讓他可以點擊跳到對應頁面

<map name="map-2">
  <area coords="127,136,128" shape="circle" href="https://zh.wikipedia.org/wiki/%E5%9F%BA%E5%8A%AA%C2%B7%E9%87%8C%E7%BB%B4%E6%96%AF">
  <area coords="426,126,99" shape="circle" href="https://zh.wikipedia.org/wiki/%E5%87%B1%E8%8E%89-%E5%AE%89%C2%B7%E6%91%A9%E7%B5%B2">
  <area coords="906,216,71" shape="circle" href="https://zh.wikipedia.org/wiki/%E8%91%89%E6%B5%B7%E4%BA%9E%C2%B7%E9%98%BF%E5%B7%B4%E6%9D%9C-%E9%A6%AC%E6%B1%80%E4%BA%8C%E4%B8%96">
  <area coords="1081,101,87" shape="circle" href="https://zh.wikipedia.org/wiki/%E5%96%AC%E7%B4%8D%E6%A3%AE%C2%B7%E6%A0%BC%E7%BE%85%E5%A4%AB" >
</map>

點擊範圍如圖

如何建立 RWD 的 Image Map 影像地圖?

任意多邊形範圍

語法如下

<area shape="poly" coords="x1, y1, x2, y2, x3, y3..." href="超連結">

在角色頭部設定任意多邊形點擊範圍

<map name="map-3">
  <area coords="128,17,223,189,33,182,59,79" shape="poly" href="https://zh.wikipedia.org/wiki/%E5%9F%BA%E5%8A%AA%C2%B7%E9%87%8C%E7%BB%B4%E6%96%AF">
  <area coords="468,40,511,163,375,192,375,99" shape="poly" href="https://zh.wikipedia.org/wiki/%E5%87%B1%E8%8E%89-%E5%AE%89%C2%B7%E6%91%A9%E7%B5%B2">
  <area coords="943,176,943,252,841,235,864,139" shape="poly" href="https://zh.wikipedia.org/wiki/%E8%91%89%E6%B5%B7%E4%BA%9E%C2%B7%E9%98%BF%E5%B7%B4%E6%9D%9C-%E9%A6%AC%E6%B1%80%E4%BA%8C%E4%B8%96">
  <area coords="1124,27,1158,157,1017,165,1021,64" shape="poly" href="https://zh.wikipedia.org/wiki/%E5%96%AC%E7%B4%8D%E6%A3%AE%C2%B7%E6%A0%BC%E7%BE%85%E5%A4%AB">
</map>

點擊範圍如圖

如何建立 RWD 的 Image Map 影像地圖?

如何使用工具快速建立 Image Map?

分享一個免費的線上工具,讀入圖片後,點擊畫出想要的 area 範圍,就能輕鬆匯出 html code 哦!

https://www.image-map.net/

進入頁面後,點擊「Select Image from My PC」讀入需要建立 Image Map 的圖片

如何建立 RWD 的 Image Map 影像地圖?

頁面中間會出現選擇的圖片,下方有輸入匡,切換 Shape 到想要的形狀,再去圖片區點擊即可建立!亦可點擊「Add New Area」增加範圍。其中 Link 等輸入匡可選填,若有填入,最後生成 code 會自動帶入 href 等欄位。

如何建立 RWD 的 Image Map 影像地圖?

建立完畢,點選「Show Me The Code」就能輕鬆得到 html code 囉!

如何建立 RWD 的 Image Map 影像地圖?

如何透過 js 讓 Image Map 可以 RWD 動態調整 area coordinates?

Image Map 在建立時,需要在 Img 上寫死 width 和 height,如此兩者才能準確對應。但是在 RWD 設計下,圖片寬高會依照頁面寬度動態改變,要如何讓 image map 裡面寫死的範圍也一同改變呢?

此時需要 jQuery RWD Image Maps 這個 lib 幫忙!使用方法非常簡單,只需要在頁面 initialize 後跑一行

$(() => {
  $('image[usemap]').rwdImageMaps();
});

當頁面寬度改變時,lib 會動態去調整 area 的 coords,如此即可做到 RWD 囉!

如果覺得我文章內容對你有幫助的話,請在文章後面幫我按 5 個讚!讓我知道大家都喜歡什麼內容哦!

範例原始碼在此下載:github

延伸閱讀:如何把 MutationObserver RxJS 化?

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。