學習資料
- JavaSE:【尚硅谷】Java零基礎入門教程
- MySQL:【菜鳥教程】MySQL教程
- JDBC:【尚硅谷】JDBC核心技術
-
HTML+CSS+JavaScript:
- 文檔:【w3school】HTML教程 | CSS教程 | JavaScript教程
- 視頻:【黑馬程序員】JavaWeb全套教程
- Bootstrap:【Bootstrap】Bootstrap v3 中文文檔
- JavaWeb:【黑馬程序員】JavaWeb全套教程
- 數據結構與算法:【尚硅谷】Java數據結構與算法
-
Spring+SpringMVC+MyBatis:
- Spring:【尚硅谷】Spring框架教程
- SpringMVC:【黑馬程序員】SSM框架教程
- MyBatis:
- (待更新......)
實用插件
- Chrome插件:Tampermonkey 油猴腳本
-
油猴腳本:b站多倍速調節(支持劇集和視頻)
// ==UserScript== // @name b站多倍速調節(支持劇集和視頻) // @namespace lgldlk // @version 0.5 // @description b站多倍速調節(支持劇集和視頻)🤞🤞🤞~~~ // @author lgldlk // @include *://*.bilibili.com/video/* // @include *://*.bilibili.tv/video/* // @include *://*.bilibili.com/bangumi/* // @include *://*.bilibili.tv/bangumi/* // @run-at document-start // @grant none // ==/UserScript== let cacheRate = 1, cacheFlag = true, rateArr = [5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0.5, 0.1] function waitForNode(nodeSelector, callback) { var node = nodeSelector(); if (node) { callback(node); } else { setTimeout(function() { waitForNode(nodeSelector, callback); }, 100); } } function debounce(func, wait) { let timer; return function() { let args = arguments; if (timer) clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args) }, wait) } } function deleteChild(e) { var child = e.lastElementChild; while (child) { e.removeChild(child); child = e.lastElementChild; } } function setRate(video, rate) { video.playbackRate=rate; } function setRateText(rate) { (document.querySelector(".bilibili-player-video-btn-speed-name")||document.querySelector("div.squirtle-select-result.squirtle-speed-select-result")).innerText = `${rate}x`; } const initRateBody = function(callBack) { waitForNode(() => document.querySelector('div.bilibili-player-video-btn-speed > div > ul')||document.querySelector("ul.squirtle-select-list.squirtle-speed-select-list.squirtle-dialog"), (node) => { var oV = document.getElementsByTagName("video")[0]; if (oV == undefined) { alert("清空緩存後刷新即可使用") return; } deleteChild(node) for (let i of rateArr) { var tmpLi = document.createElement('li'); tmpLi.classList = "bilibili-player-video-btn-speed-menu-list squirtle-select-item "; tmpLi.innerText = `${ i}x`; tmpLi.style.height = "30px" tmpLi.style["font-size"] = "16px" tmpLi.style["line-height"] = "30px" tmpLi.addEventListener("click", function(k) { return function(e) { e.stopPropagation(); e.preventDefault(); cacheRate = k setRate(oV, k) setRateText(k) } }(i)); node.appendChild(tmpLi); } oV.addEventListener('DOMNodeRemoved', () => { if (cacheFlag == true) { let tmp = debounce(function() { initRateBody(setRate(oV, cacheRate)); setRateText(cacheRate) cacheFlag = true; }, 1000) tmp(); } cacheFlag = false }); callBack && callBack(); }); }; window.onload = initRateBody(null); window.onhashchange = function() { initRateBody(setCacheRate); } -
油猴腳本:跳過bilibili充電鳴謝
// ==UserScript== // @name 跳過bilibili充電鳴謝 // @namespace 怒火無邊 // @version 2.0 // @description 跳過bilibili充電鳴謝,自動連續播放 // @author 怒火無邊 // @match https://www.bilibili.com/video/* // @grant GM_log // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_deleteValue // @license MIT License // ==/UserScript== (function() { if(document.getElementsByTagName('video').length==0){ document.getElementsByTagName('bwp-video')[0].onended=function(){ document.getElementsByClassName('bilibili-player-video-btn-next')[0].click() } }else{ document.getElementsByTagName('video')[0].onended=function(){ document.getElementsByClassName('bilibili-player-video-btn-next')[0].click() } } })();