2019年12月16日 星期一

【影像地圖】在網頁圖片上劃分區塊,給予不同功能

方法一:用map和area做

<img src='' usemap='#aaa'>
<map>
  <area shape="poly" coords="156,218,170,201,233,189,295,187,342,202,346,222,322,281,304,289,262,280,244,275,219,285,192,288,167,258" style="outline:solid;" onclick="alert("test")">
</map>

做完以後放到手機版上發現,大跑版!!!所以我也沒有要認真講這個方法的意思,跑版的原因是他是吃pixel的,當在不同的螢幕上應該要乘上圖片的縮放比例才能準確標出位置。

網路上有一些寫好的js可以做,但是我插入以後還是覺得治標不治本。

第二個不推薦用map\area原因是不能選取的部分變色,area是不顯示的元素,所以吃不到css。

那這兩個都可以用svg完美的達成,所以我們就來講svg吧!

方法二:用svg

svg的概念其實就是在網頁上用文字畫貝茲曲線,所以他會是矢量檔,縮放不影響畫質。那麼要怎麼操作呢?

建立svg圖片

我們先去adobe illustrator上面隨便畫一個圖片

從右下角的圖層裡面可以看到:上面的圖層是圓形,裡面有一個圓形的路徑

下面的圖層是方形,裡面有兩個方形(矩形跟圓角矩形)的路徑

畫好以後我們就輸出成svg,點檔案>轉存>轉存為螢幕適用

然後選用svg的檔案形式存擋

存好檔了以後就用文字編輯器開啟,我是用atom,其他可以打程式碼的都可以。

打開以後就會是我們的code了

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
  <defs>
    <style>
      .cls-1{fill:#ad5e5e;}
      .cls-1,.cls-2,.cls-3{stroke:#000;stroke-miterlimit:10;}
      .cls-2{fill:#e2c79f;}.cls-3{fill:#a0e0ac;}
    </style>
  </defs>
  <title>工作區域 1</title>
  <g id="方形">
    <rect id="紅色" class="cls-1" x="75" y="93" width="165" height="165"/>
    <rect id="褐色" class="cls-2" x="169" y="193" width="179" height="144" rx="12" ry="12"/>
  </g>
  <g id="圓">
    <circle id="綠色" class="cls-3" cx="362" cy="367" r="87.5"/>
  </g>
</svg>

對應我們剛剛做的圖層就是標籤<g>,方形路徑就是<rect>,圓形路徑就是<circle>,其他的不規則形狀是<path>(這邊沒用到)

我們順便發現很貼心的是id都幫我們用ai裡面的名稱命名好了,更爽的是style好像就是我們看得懂的css語法呢

完全沒錯呢,所以我們就加點簡單的語法讓這個圖片跟著點擊做些動作吧~

圖片內各區塊增加不同動作

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
  <defs>
    <style>
      .cls-1{fill:#ad5e5e;}
      .cls-1,.cls-2,.cls-3{stroke:#000;stroke-miterlimit:10;}
      .cls-2{fill:#e2c79f;}.cls-3{fill:#a0e0ac;}
    </style>
  </defs>
  <title>工作區域 1</title>
  <g onclick="move(event)" id="方形">
    <rect onclick="move(event)" id="紅色" class="cls-1" x="75" y="93" width="165" height="165"/>
    <rect onclick="move(event)" id="褐色" class="cls-2" x="169" y="193" width="179" height="144" rx="12" ry="12"/>
  </g>
  <g onclick="move(event)" id="圓">
    <circle onclick="move(event)" id="綠色" class="cls-3" cx="362" cy="367" r="87.5"/>
  </g>
</svg>
<style>
    .cls-1:hover,.cls-2:hover,.cls-3:hover{opacity:.5;transition.3s all;}
</style>
<script>
  function move(e){
    alert("你點了"+e.currentTarget.id+"!!!");
  }
</script>

style裡面加入了hover所以在電腦上滑鼠放上去或是手機點擊的時候,飽和度會剩一半。

另外每個元素都加了點擊的事件,script會讓被點擊的物件的id跳出警告視窗,下面是寫好的demo來點點看吧

如果是要跳轉畫面的話,要搭配window.location="https:google.com"; 的js來執行,用href=""是行不通的喔

展示一下

工作區域 1

沒有留言:

張貼留言