Greasy Fork is available in English.
滚轮音量调节;鼠标功能键全屏;快捷键:开关弹幕D、网页全屏W、隐藏有边框Q、↑↓键音量调节、←→快进快退改成5s、Ctrl+←→快进快退30s
// ==UserScript== // @name 优#(youku)快捷操作 // @namespace hhh2000 // @version 0.1 // @description 滚轮音量调节;鼠标功能键全屏;快捷键:开关弹幕D、网页全屏W、隐藏有边框Q、↑↓键音量调节、←→快进快退改成5s、Ctrl+←→快进快退30s // @author hhh2000 // @match http*://v.youku.com/v_show/* // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @run-at document-end // @grant none // @compatible chrome /* globals jQuery, $, waitForkeyElements */ /* eslint-disable no-multi-spaces, dot-notation */ /* eslint no-eval:0 */ // ==/UserScript== 'use strict'; (function() { function getkeyCode(k) { var keyCodes = { 300: '滚↑轮', 301: '滚↓轮', 302: '鼠标左键', 303: '鼠标右键', 304: '鼠标中键', 305: '鼠标左前侧键', 306: '鼠标左后侧键', 307: '鼠标右前侧键', 308: '鼠标右后侧键', 309: '鼠标中前侧键', 310: '鼠标中后侧键', 0: "", 3: "break", 8: "Backspace", 9: "Tab", 12: "Clear", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "PauseBreak", 20: "CapsLock", 27: "Escape", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "←", //LeftArrow ↑ ↓ ← → 38: "↑", //UpArrow 39: "→", //RightArrow 40: "↓", //DownArrow 45: "Insert", 46: "Delete", 48: "0", 49: "1", 50: "2", 51: "3", 52: "4", 53: "5", 54: "6", 55: "7", 56: "8", 57: "9", 65: "A", 66: "B", 67: "C", 68: "D", 69: "E", 70: "F", 71: "G", 72: "H", 73: "I", 74: "J", 75: "K", 76: "L", 77: "M", 78: "N", 79: "O", 80: "P", 81: "Q", 82: "R", 83: "S", 84: "T", 85: "U", 86: "V", 87: "W", 88: "X", 89: "Y", 90: "Z", 93: "ContextMenu", 96: "NumPad0", 97: "NumPad1", 98: "NumPad2", 99: "NumPad3", 100: "NumPad4", 101: "NumPad5", 102: "NumPad6", 103: "NumPad7", 104: "NumPad8", 105: "NumPad9", 106: "NumPad_Multiply", 107: "NumPad_Add", 108: "NumPad_Separator", 109: "NumPad_Subtract", 110: "NumPad_Decimal", 111: "NumPad_Divide", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 124: "F13", 125: "F14", 126: "F15", 127: "F16", 128: "F17", 129: "F18", 130: "F19", 144: "NumLock", 145: "ScrollLock", 166: "BrowserBack", 167: "BrowserForward", 170: "BrowserSearch", 172: "BrowserHome", 173: "AudioVolumeMute", 174: "AudioVolumeDown", 175: "AudioVolumeUp", 176: "MediaTrackNext", 177: "MediaTrackPrevious", 178: "MediaStop", 179: "MediaPlayPause", 180: "LaunchMail", 181: "LaunchMediaPlayer", 183: "LaunchApp2", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 193: "ABNT_C1", 194: "ABNT_C2", 219: "[", 220: "\\", 221: "]", 222: "'", 223: "OEM_8", 226: "OEM_102", 229: "KeyInComposition", }; return keyCodes[k]; } let keycode = { 'Enter': 13, 'Ctrl': 17, 'Esc': 27, 'left': 37, 'right': 39, 'up': 38, 'down': 40, 'space': 32, 'NumPad0': 96, 'NumPad_Decimal': 110, } let h5Player let log = console.log let dir = console.dir let err = console.error function waitForTrue(ifTrue, callback, time=100) { if(--time < 0) {err('waitForTrue 超时 '+ifTrue); return false;} const fn = waitForTrue; //let fn = arguments.callee; if (ifTrue()) { callback(); return true; } else { setTimeout(function() { fn(ifTrue, callback, time); }, 50); } } function geth5Player(){ return $('video')[0] } function set_progress(selector, percent, limit_begin, limit_end){ function calc_bar_offset(percent, bar_length, limit_begin, limit_end){ let p = Math.max(Math.min(+percent, limit_end), limit_begin); let limit = limit_end - limit_begin; let bar_offset = (p-limit_begin) * bar_length / limit; //console.log(p, limit, bar_offset) //return Math.round(bar_offset); //百分比对应进度条位置 return bar_offset; //百分比对应进度条位置 } $('.kui-dashboard-dashboard-panel').css('display','flex') $('.kui-volumecontrol-').addClass('kui-s-hover') let e = new MouseEvent('click') let rect = selector.getBoundingClientRect() //console.log(rect) //console.log(percent, rect.bottom-rect.top, limit_begin, limit_end) let bar_offset = calc_bar_offset(percent, rect.bottom-rect.top, limit_begin, limit_end) let clientY = rect.bottom - bar_offset //console.log(bar_offset+' - '+clientY) e.initMouseEvent('click',1,1,window,1,0,0,0,clientY+0.5,0,0,0,0,0,null) selector.dispatchEvent(e) $('.kui-volumecontrol-').removeClass('kui-s-hover') $('.kui-dashboard-dashboard-panel').css('display','') } function adjust_progress(selector, inc_percent, range_bengin, range_end){ const curr_percent = parseInt($('#volume-tip').text()) //console.log(curr_percent,inc_percent,(curr_percent+parseInt(inc_percent))) set_progress(selector, curr_percent+parseInt(inc_percent), 0, 100) } //显示hint function cut_InfoDisappear(){ if($('.kui-message-information-item').css('animation-name') === 'InfoDisappear'){ $('.kui-message-information-item').css('animation-name', 'InfoDisappear1') }else{ $('.kui-message-information-item').css('animation-name', 'InfoDisappear') } } function select_rate(diff){ let rate_text = ['0.5X','1.0X','1.25X','1.5X','2.0X'] let curr_rate_text = $('.kui-playrate-rate-item[style*=color]').text() //console.log(curr_rate_text) let rate_index = rate_text.indexOf(curr_rate_text) + diff rate_index = Math.min(Math.max(rate_index, 0), rate_text.length-1) //console.log(rate_index) $(`.kui-playrate-rate-item:contains(${rate_text[rate_index]})`).click() $('.kui-message-information-item .kui-message-information-text').text(`${rate_text[rate_index]}`) //curr_rate_text = $('.kui-playrate-rate-item[style*=color]').text() //console.log(curr_rate_text) } function setCurrentTime(second){ h5Player = geth5Player() h5Player.currentTime = h5Player.currentTime + second; } //滚轮音量调节;鼠标功能键全屏;快捷键:开关弹幕D、网页全屏W、隐藏有边框Q、↑↓键音量调节、←→快进快退改成5s、Ctrl+←→快进快退30s function run(){ log('youku快捷操作加载完毕') h5Player = geth5Player() let keystrokes = 0 //非全屏滚轮音量调节 $('#player').off('mousewheel.hhh_youku').on('mousewheel.hhh_youku',function(e){ let delta = e.originalEvent.wheelDelta if(delta >= 120){ //up adjust_progress($('#kui_dashboard_volume-control_volumeSlider')[0], 1, 0, 100) }else{ adjust_progress($('#kui_dashboard_volume-control_volumeSlider')[0], -1, 0, 100) } return false }) //功能键全屏 $('#player').off('mousedown.hhh_youku').on('mousedown.hhh_youku',function(e){ if(e.buttons > 2){ $('.kui-webfullscreen-icon-0').click() return false } }) //======快捷键====== $('body').off('keyup.hhh_youku').on('keyup.hhh_youku',function(e){ if(e.ctrlKey && (e.keyCode === keycode['left'] || e.keyCode === keycode['right'])){ //←→ +/-30s return false } if(e.keyCode === keycode['left'] || e.keyCode === keycode['right']){ //←→ +/-5s //log('keystrokes: ',keystrokes) if(e.keyCode === keycode['right'] && keystrokes > 1){ keystrokes = 0 return } keystrokes = 0 let secode = e.keyCode === keycode['left'] ? 5 : -10 setCurrentTime(secode) h5Player.play() //h5Player.playbackRate = 1 //return false } }) $('body').off('keydown.hhh_youku').on('keydown.hhh_youku',function(e){ //---功能键--- if(e.ctrlKey && (e.keyCode === keycode['up'] || e.keyCode === keycode['down'])){ //Ctrl+↑↓ 视频速度 if(e.keyCode === keycode['up']){ select_rate(1) }else{ select_rate(-1) } return false }else if(e.ctrlKey && (e.keyCode === keycode['left'] || e.keyCode === keycode['right'])){ //Ctrl+←→ +/-30s let secode = e.keyCode === keycode['left'] ? -30 : 30 setCurrentTime(secode) h5Player.play(); return false } if(e.ctrlKey || e.shiftKey || e.altKey) return; //---非功能键--- if(e.keyCode === keycode['up'] || e.keyCode === keycode['down']){ //↑↓音量 if(e.keyCode === keycode['up']){ adjust_progress($('#kui_dashboard_volume-control_volumeSlider')[0], 5, 0, 100) }else{ adjust_progress($('#kui_dashboard_volume-control_volumeSlider')[0], -5, 0, 100) } //$('.kui-message-information-text font').text($('#volume-tip').text()) //set hint text //cut_InfoDisappear() return false }else if(e.keyCode === keycode['NumPad_Decimal'] || e.keyCode === keycode['NumPad0']){ //NumPad_Decimal numpad1音量 if(e.keyCode === keycode['NumPad_Decimal']){ adjust_progress($('.kui-volumecontrol-volume-dashboard')[0], -1, 0, 100) }else{ adjust_progress($('.kui-volumecontrol-volume-dashboard')[0], 1, 0, 100) } return false }else if(e.keyCode === keycode['right']){ // ++keystrokes //if(keystrokes === 1) return false }else if(e.keyCode === 'W'.charCodeAt()){ //W 网页全屏 $('.kui-webfullscreen-icon-0').click() }else if(e.keyCode === 'Q'.charCodeAt()){ //W 宽屏 $('.iconzhankaijiantou-shang, .iconzhankaijiantou-xia').click() }else if(e.keyCode === 'D'.charCodeAt()){ //D 开关弹幕 $('.switch-img_12hDa:first').click() } }) } waitForTrue(()=>$('#kui_dashboard_volume-control_volumeSlider').length>0, ()=>{ run() }) })();