手把手教你撰寫一個 Youtube 影片懸浮外掛

當使用者觀看評論時、影片不在使用者視線內,影片將會自動懸浮至畫面右下角的腳本,讓我們透過一點點 JavaScript 以及 CSS 來完成這個任務。

realdennis
3 min readJan 19, 2019

除了 YouTube 以外,許多擁有影片的社群網站皆擁有這個功能,舉凡 Facebook 、 bilibili ,都會在使用者滾動後,將影片懸浮至角落。這次我們就使用 JavaScript 幫 YouTube 把這個好用的功能加回去吧!

更新:你可以在這裡安裝外掛套件,或是GitHub查看完整程式碼。

直接來看看 Demo

完整程式碼如下

接著來講解一下這段程式碼到底做了什麼。

教學文如下

1. 定義新的 CSS rule

我們需要一個新的 CSS rule ,在不同情況透過把 Elementclass 抽換,原因是我們不希望影響到原始頁面的 CSS (inline-css)。這邊我透過添加一個新的 style 標籤,把對應的規則設定好。

2. 自幹debounce

因為監聽滾動事件,我希望能讓 callback 能夠在一定頻率內只執行一次,所以透過觀察計時器是否存在,自幹了一個 debounce 。

只有 10 行,超級精簡的 debounce 。

3. 觀察是否在使用者視線內

這邊使用最懶人的方式,透過getBoundingClientRect 的方法,取得該元素的各項 offset ,由於YouTube影片皆是在最上方,所以當影片的 container 之bottom為負值時,代表影片已經不再使用者視線範圍內

這時我們把剛剛定義好的 CSS rule 給 append 進去。

反之,當在視線內時則把該 class 給 replace 掉。

4. 將監聽器掛在 scroll 事件並且 debounce

沒什麼好說的…記得 debounce 一波,不然使用者會難受想哭。

大功告成!

另外一些小細節補充

  • 2.3 行做防禦性編程,避免重複掛載事件。
  • 17 行原因是該元素的 z-index 會影響 <video> 是否被其他元素蓋住
  • 32 行除了調整成大於0以外,也可以調整成 > header 的高度 (56之類的)

使用方式

可以使用 Bookmarklet 或是 Userscript 的方式,推薦後者。

Bookemarklet

  • 將代碼加入書籤連結並以javascript: 做開頭,並將腳本加入後頭。
  • 將來想使用時點擊即可加載腳本。

Userscript (使用 tampermonkey)

  • 將代碼設定好配對的 URL ,每次自動加載。

補充:如果用tampermonkey的話建議使用這個完整腳本

(52–53 lines)將事件註冊在 youtube 導航事件之後

--

--

No responses yet