寫這篇文章的意義並不在於分享技術,而是讓更多的人知道這個方法,使用這個方法.git
原文地址: https://segmentfault.com/a/11...
最新在B站刷<奪寶幸運星>這個動畫片,動畫時長8:30,片頭1:30,片尾長1:08.合着中間內容就6分鐘左右,我卻要看2:30的片頭片尾.每次遇到片頭片尾都要手動去拉進度條,簡直不能忍,個人時間那麼寶貴,那居然讓我看片頭!而這時候我發現B站居然麼有跳過片頭片尾的功能!
好,你沒有,爲了更愉快的刷個人動畫片,我給你寫個.github
通過幾十集的拉進度條訓練,這個業務我已經很熟練了,我發現片頭片尾的時長通常都是固定的.那麼咱們要想自動跳過片頭片尾其實能夠:segmentfault
好了思路有了,那怎麼控制視頻跳過期間呢?ide
一開始我想經過控制鼠標來解決.後來發現不可控因素太多,因而我開始翻B站的代碼,但願能夠獲得一些提示,黃天不負無聊人,我在window
對象上發現了player
這個屬性,而這個屬性還有一大坨的方法:動畫
play pause reload seek ...
簡單試驗以後發現,經過這個player
屬性上帶的方法咱們就能夠控制播放行爲.
同時還發現了一些player
的事件code
video_media_ended video_media_error video_media_loaded ...
結合以上所得,咱們就能夠實現咱們想要的功能了.視頻
function skip (start_length, end_length) { if (!start_length || !end_length) { return console.error('請設置片頭和片尾時長') } let total_time = player.getDuration(); let skip_point_start = start_length; let skip_point_end = total_time - end_length; let has_listener = false; const interval = 5000; window.timer = 0; function start () { console.log('開搞'); if (timer) { clearInterval(timer); } handler(); timer = setInterval(handler, interval) } function handler () { let current_time = player.getCurrentTime(); if (current_time < skip_point_start) { console.log('跳過片頭') return window.player.seek(start_length); } if (current_time >= skip_point_end) { console.log('跳過片尾,下一集') if (!has_listener) { has_listener = true; window.player.addEventListener('video_media_loaded', start); } return window.player.next(); } } start(); }
固然,如咱們前面所說,要使用這個腳本須要指定兩個時間:
片頭時長和片尾時長,單位都是秒.
而後把這兩個參數傳給上面這個方法執行就好了對象
skip(90, 68);
這樣就能夠自動跳過片頭片尾了,珍惜咱們寶貴的時間.事件
我用了兩天時間,恩恩,不錯,對於固定片頭片尾的劇很好,可是會遇到一些片頭規則,片尾不規則的狀況,這種狀況會出問題,常常是沒看完就切換到下一集了.但這個問題沒關係,你們注意就好了.ip
我把一些更詳細的內容放在倉庫了,有須要的能夠自取,記得轉載註明出處就ok了
B站跳過開頭結尾腳本 ~ aqiongbei/bilibili_scripts