您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add zoom function to YouTube video player.
当前为
- // ==UserScript==
- // @name Zoom function for YouTube
- // @name:ja YouTubeで動画をズーム
- // @description Add zoom function to YouTube video player.
- // @description:ja YouTubeの動画プレイヤーにズーム機能を追加します。
- // @namespace https://twitter.com/sititou70
- // @include /https?:\/\/www\.youtube\.com.*/
- // @require https://code.jquery.com/jquery-3.2.1.min.js
- // @version 1.5
- // @grant none
- // ==/UserScript==
- jQuery.noConflict();
- (function($){
- //function
- var video_scaleup = function(select_rect){
- var player_aspect_ratio = $("#movie_player").width() / $("#movie_player").height();
- var select_aspect_ratio = select_rect.width / select_rect.height;
- var centering_offset = {
- x: 0,
- y: 0
- };
- var scale_up_ratio = null;
- if(player_aspect_ratio < select_aspect_ratio){
- //fit width
- scale_up_ratio = $("#movie_player").width() / select_rect.width;
- centering_offset.y = ($("#movie_player").height() - select_rect.height * scale_up_ratio) / 2;
- }else{
- //fit height
- scale_up_ratio = $("#movie_player").height() / select_rect.height;
- centering_offset.x = ($("#movie_player").width() - select_rect.width * scale_up_ratio) / 2;
- }
- $("video").stop().animate({
- top: select_rect.y * scale_up_ratio * -1 + centering_offset.y + "px",
- left: select_rect.x * scale_up_ratio * -1 + centering_offset.x + "px",
- width: $("video").width() * scale_up_ratio,
- height: $("video").height() * scale_up_ratio
- }, 500);
- now_scale_up = true;
- };
- var video_scaledown = function(){
- $("video").stop().animate({
- top: save_css.top,
- left: save_css.left,
- width: save_css.width,
- height: save_css.height
- }, 500);
- now_scale_up = false;
- };
- //set event handler
- var now_scale_up = false;
- var mousedown_offset = null;
- var save_css = null;
- var timer_id = 0;
- var set_player_event = function(){
- $("#player-api").mousemove(function(){
- $(".ytp-gradient-top").css("opacity", "1");
- $(".ytp-chrome-top").css("opacity", "1");
- $(".ytp-gradient-bottom").css("opacity", "1");
- $(".ytp-chrome-bottom").css("opacity", "1");
- clearTimeout(timer_id);
- timer_id = setTimeout(function(){
- $(".ytp-gradient-top").css("opacity", "0");
- $(".ytp-chrome-top").css("opacity", "0");
- $(".ytp-gradient-bottom").css("opacity", "0");
- $(".ytp-chrome-bottom").css("opacity", "0");
- }, 2000);
- }).mouseleave(function(){
- $(".ytp-gradient-top").css("opacity", "0");
- $(".ytp-chrome-top").css("opacity", "0");
- $(".ytp-gradient-bottom").css("opacity", "0");
- $(".ytp-chrome-bottom").css("opacity", "0");
- });
- $("video").mousedown(function(e){
- mousedown_offset = {offsetX: e.offsetX, offsetY: e.offsetY};
- if(!now_scale_up){
- save_css = {
- top: $("video").css("top"),
- left: $("video").css("left"),
- width: $("video").css("width"),
- height: $("video").css("height")
- };
- }
- });
- $("video").mouseup(function(e){
- var select_rect = {
- width: Math.abs(e.offsetX - mousedown_offset.offsetX),
- height: Math.abs(e.offsetY - mousedown_offset.offsetY),
- x: Math.min(mousedown_offset.offsetX, e.offsetX),
- y: Math.min(mousedown_offset.offsetY, e.offsetY)
- };
- if(!(select_rect.width <= 10 || select_rect.height <= 10)){
- video_scaleup(select_rect);
- return false;
- }
- return true;
- });
- };
- $(document).keydown(function(key){
- switch(key.keyCode){
- case 82:
- video_scaledown();
- break;
- }
- });
- var observer = new MutationObserver(function(){
- if($("#player-api").length === 1)set_player_event();
- });
- observer.observe($("#page")[0], {
- attributes: true
- });
- })(jQuery);