iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
0
自我挑戰組

JS30自我學習筆記系列 第 23

第二十二堂 - Follow Along Link Highlighter

  • 分享至 

  • xImage
  •  

今天的實作又是要練習一種網頁特效,而這堂課其實只是之後某堂課的前導,所以不會太難,各位可以期待一下幾天後的進階版。而這次的練習是讓滑鼠在頁面上移動到特定元素時,該元素會被highlight,且highlight的效果會隨著字串長短而改變長度。實作範例如下:

Imgur

程式碼也是相當簡短,所以就直接在這邊跟各位說明。

首先取得頁面上所有<a>元素,以及建立highlight的<span>元素。接著監聽各<a>元素的mouseenter事件,觸發highlightLink()

為了讓highlight樣式隨著字串長度不同而改變,以及決定highlight顯示的位置,highlightLink()先使用getBoundingClientRect()來抓取滑鼠移動到的元素的邊界值,透過這個函式我們能夠得到該元素的邊界,包含top、bottom、left、right、height、width、x、y。我們將這些取出來作為highlight顯示的位置,這邊注意top和left的部分在取值之後又多加了scrollY和scrollX,是因為若畫面出現卷軸時,會因為卷軸滾動的距離而產生偏差,因此我們要把這個偏差修正回來。

const triggers = document.querySelectorAll('a');
const highlight = document.createElement('span');
highlight.classList.add('highlight');
document.body.appendChild(highlight);

function highlightLink() {
  const linkCoords = this.getBoundingClientRect();
  const coords = {
    width: linkCoords.width,
    height: linkCoords.height,
    top: linkCoords.top + window.scrollY,
    left: linkCoords.left + window.scrollX
  };

  highlight.style.width = `${coords.width}px`;
  highlight.style.height = `${coords.height}px`;
  highlight.style.transform = `translate(${coords.left}px, ${coords.top}px)`;

}

triggers.forEach(a => a.addEventListener('mouseenter', highlightLink));


上一篇
第二十一堂 - Geolocation
下一篇
第二十三堂 - Speech Synthesis
系列文
JS30自我學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言