YouTube Video Speed & Seek Mouse Control

Dynamically adjust video playback speed & seeking instantly with your mousewheel, no more need to go through player menus every time.

当前为 2016-08-08 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YouTube Video Speed & Seek Mouse Control
// @namespace    YPSSMC
// @version      3.1
// @description  Dynamically adjust video playback speed & seeking instantly with your mousewheel, no more need to go through player menus every time.
// @run-at       document-ready
// @include 	 http://www.youtube.com/* 
// @include 	 https://www.youtube.com/*
// @require 	 http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require      https://greasyfork.org/scripts/12284-jquery-mousewheel-3-1-13/code/jQuery%20Mousewheel%203113.js
// @require      https://greasyfork.org/scripts/14098-bililiterange-js/code/bililiteRangejs.js?version=88786
// @require      https://greasyfork.org/scripts/14097-jquery-simulate/code/jQuery%20Simulate.js?version=88785
// @require      https://greasyfork.org/scripts/14096-jquery-simulate-extended-plugin-1-3-0/code/jQuery%20Simulate%20Extended%20Plugin%20130.js?version=88784
// @require      https://greasyfork.org/scripts/14095-jquery-simulate-key-sequence-plugin-1-3-0/code/jQuery%20Simulate%20Key-Sequence%20Plugin%20130.js?version=88783
// @author       drhouse
// @icon         https://s.ytimg.com/yts/img/favicon-vfldLzJxy.ico
// ==/UserScript==

$(document).ready(function () {
	function getPlaybackRate() {
		var v = $('.video-stream')[0];
		return v.playbackRate;
	}

    var speed = getPlaybackRate().toFixed(2);
	var isShift = false;
	var isAlt = false;
	var ytplayer = document.getElementById("movie_player");

	$(ytplayer).prepend('<div id="rate">' + speed + ' </div>');
	$("#rate").css("z-index","999");
	$("#rate").css('position', 'absolute');
	$("#rate").css('top', '0');
	$("#rate").css('right', '0');

	function setPlaybackRate(r) {
		var v = $('.video-stream')[0];
		if (v === undefined || v.playbackRate === undefined) {
			setTimeout(function(){setPlaybackRate(r);}, 1000);
			return;
		}
		v.playbackRate = r;
	}

	$(window.document).mousewheel(function(e) {
		//Seek | Shift+WheelUp/Down
		if (e.shiftKey) {
			if (e.deltaX<0) {
				if (location.href.toString().indexOf("embed") == -1) { //youtube.com
					var ytplayer = document.getElementById("movie_player");
					var time = ytplayer.getCurrentTime();
					ytplayer.seekTo(time+5, true);
				}
				else{$('.video-stream').simulate("key-sequence", { sequence: "l" });} //embed
			} else {
				if (location.href.toString().indexOf("embed") == -1) { //youtube.com
					var ytplayer = document.getElementById("movie_player");
					var time = ytplayer.getCurrentTime();
					ytplayer.seekTo(time-5, true);
				}
				else{$('.video-stream').simulate("key-sequence", { sequence: "j" });} //embed
			}
			e.preventDefault();
		}

		//Speed | Alt+WheelUp/Down
		if (e.altKey) {
			var step = 0.25;
			if (e.deltaY<0) {         
				var speed = Math.max(0.0,(getPlaybackRate()-step).toFixed(2));
				setPlaybackRate(speed);
			} else { 
				var speed = Math.min(8,(getPlaybackRate()+step).toFixed(2));
				setPlaybackRate(speed);
			}
			e.preventDefault();
			$("#rate").remove();
			var speed = speed.toFixed(2);
			var ytplayer = document.getElementById("movie_player");
			$(ytplayer).prepend('<div id="rate">' + speed + ' </div>');
			$("#rate").css("z-index","999");
			$("#rate").css('position', 'absolute');
			$("#rate").css('top', '0');
			$("#rate").css('right', '0');

		}
	});
})