您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Gives new tools for youtbe playback
// ==UserScript== // @name Video Framing Sliders - for YouTube // @namespace http://tampermonkey.net/ // @version 0.1 // @description Gives new tools for youtbe playback // @author RGSoftware // @include *.youtube.*/watch?v=* // @grant none // @runat document-body // @locale en-us // @require https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js // ==/UserScript== /* .:Notes:. I didn't want to use Jquery, but then I did a little. But too lazy to rewrite the vanilla javascript in jquery */ tools = { createElement: function(parent, id, eletype, value, style, className, textClassName, onclickFunc){ parent = document.getElementById(parent); var e = document.createElement(eletype); e.className = className; e.onclick = onclickFunc === null ? '' : onclickFunc; parent.appendChild(e); var label = document.createElement('span'); label.innerHTML = value; label.className = textClassName; e.setAttribute('style', style); e.appendChild(label); return e; // return handle }, toggle: false, toggleTools : function(motherEle, toolsDiv){ tools.toggle = !tools.toggle; /* var x = document.getElementById(e); var z = document.getElementById(toolsDiv); */ var animSpeed = 500; var e = $("#"+toolsDiv); if (tools.toggle){ e.animate({height: "150px"}, animSpeed); /* $("#"+motherEle).animate({minHeight: "300px"}, animSpeed); x.setAttribute("style", "min-height:300px"); z.style.height = "150px"; */ }else{ e.animate({height: "0px"}, animSpeed); /* $("#"+motherEle).animate({minHeight: "150px"}, animSpeed); z.style.height = "0px" x.setAttribute("style", "min-height:150px"); */ } }, createElementAlt : function(elementType, data, type, className, style, id, parent){ var e = document.createElement(elementType); parent = document.getElementById(parent); switch (elementType.toUpperCase()){ case "INPUT": e.setAttribute('type', type); e.value = data; break; case "BUTTON": e.value = data; break; case "SPAN": e.innerHTML = data; break; } e.id = id; e.innerHTML = data; e.value = data; e.className = className; e.setAttribute('style', style); parent.appendChild(e); }, }; /*Some constants, infos*/ var youtube = { btnStyle1 : 'yt-uix-button yt-uix-button-size-default yt-uix-button-opacity yt-uix-button-has-icon no-icon-markup pause-resume-autoplay action-panel-trigger action-panel-trigger-share yt-uix-tooltip', btnStyle2 : 'yt-uix-button yt-uix-button-size-default yt-uix-button-opacity yt-uix-button-has-icon no-icon-markup pause-resume-autoplay yt-uix-menu-trigger yt-uix-tooltip', }; /* Main elements creation */ //div tools.createElementAlt("div", '', '', '', 'height:0px; overflow:hidden;', 'myDiv', 'watch-header'); //watch8-secondary-actions //height:153px; width:843px; var toolsDiv = document.getElementById('myDiv'); var toggleToolsBtn = tools.createElement("watch8-secondary-actions", "myBtn", "button", "Show Tools", "", youtube.btnStyle1, "t-uix-button-content", null); toggleToolsBtn.onclick = function(){tools.toggleTools('watch-header','myDiv');}; /* item 1 - label tools.createElementAlt('span', 'Scale X', '', '', '', 'scaleXSliderLabel', 'myDiv'); item 1 - Scale X Slider tools.createElementAlt('input', '1', 'range', '', '', 'scaleXSlider', 'myDiv'); item 2 - label tools.createElementAlt('span', 'Scale Y', '', '', '', 'scaleYSliderLabel', 'myDiv'); item 2 - Scale Y Slider tools.createElementAlt('input', '1', 'range', '', '', 'scaleYSlider', 'myDiv'); item 3 - lock Scale checkbox tools.createElementAlt('input', '', 'checkbox', '', '', 'lockScaleCheckbox', 'myDiv'); item 3 - lock Scale checkbox label tools.createElementAlt('label', 'Lock Scale X+Y', '', '', '', 'LabelForCheckbox', 'myDiv'); */ function ElementWithLabel(elementType, text, type, className, style, id, parent){ this.elementType = elementType; this.text = text; this.type = type; this.className = className; this.style = style; this.elementId = id; this.labelId = id+'-container'; this.parent = parent; //create elements first! tools.createElementAlt('span', this.text, '', '', '', this.labelId, this.parent); //LABEL WRAP tools.createElementAlt(this.elementType, '', this.type, this.className, this.style, this.elementId, this.labelId); //CHECKBOX //now you can return the element 'handle' this.labelElement = document.getElementById(this.labelId); this.element = document.getElementById(this.elementId); } function slider(labeltext, id, parent, min, max, step, startValue){ this.id = id; this.parent = parent; this.labeltext = labeltext; this.min = min; this.max = max; this.step = step; this.startValue = startValue; this.create = createSlider(this.labeltext, this.id, this.parent, this.startValue); this.setDefaults = setDefaults(this.id, this.min, this.max, this.step); this.element = document.getElementById(this.id); this.getPercentLabel = this.id + "Percent"; this.percentage = this.element.value + "%"; this.updateLabel = function(){sliderSeeked(this.getPercentLabel, this.id);}; // this.resetValue = function(){resetValue(this.id);}; this.element.ondblclick = function(){ resetValue(this.id, startValue); }; // setDefaults(this.id, -5, 5, 0.01); } function createSlider(labeltext, id, parent, startVal){ var cstyle = "position:relative; top:-6px; padding:5px;"; //middle align top:-11px; var contParent = id+"-container"; tools.createElementAlt('div', '', '','', 'border: 1px solid black;', contParent, parent); //Container tools.createElementAlt('span', labeltext, '', '', cstyle, id+"label", contParent); //Label tools.createElementAlt('input', startVal, 'range', '', 'width:150px;', id, contParent); //Slider tools.createElementAlt('span', startVal+"%", '', '', cstyle, id+"Percent", contParent); //PercentLabel } function sliderSeeked(percentlbl, sliderEle){ var slider = document.getElementById(sliderEle); var sVal = parseFloat(slider.value).toFixed(2); document.getElementById(percentlbl).innerHTML = + sVal + "%"; } function resetValue(e, startVal){ var slider = document.getElementById(e); slider.value = startVal; } function setDefaults(e, min, max, step){ var x = document.getElementById(e); x.max = max; x.min = min; x.step = step; } //slider(labeltext, id, parent) var sliderX = new slider("Scale X", "scaleXSlider", "myDiv", -5, 5, 0.01, 1); sliderX.element.onmousemove = function(){ var sVal = parseFloat(sliderX.element.value).toFixed(2); sliderX.updateLabel(); video.scaleX(sVal); if (lockScaleCheckbox.element.checked === true){ video.scaleY(sVal); sliderY.element.value = sVal; sliderY.updateLabel(); } }; var sliderY = new slider("Scale Y", "scaleYSlider", "myDiv", -5, 5, 0.01, 1); sliderY.element.onmousemove = function(){ var sVal = parseFloat(sliderY.element.value).toFixed(2); sliderY.updateLabel(); video.scaleY(sVal); if (lockScaleCheckbox.element.checked === true){ video.scaleX(sVal); sliderX.element.value = sVal; sliderX.updateLabel(); } }; //function ElementWithLabel(elementType, text, type, className, style, id, parent){ var lockScaleCheckbox = new ElementWithLabel('input', 'Lock Scale', 'checkbox', '','', 'scaleLock-checkbox', 'myDiv'); //if (lockScaleCheckbox.element.checked === true){ // video.scaleY(sVal); sliderY.element.value = sVal; sliderY.updateLabel(); //LOCKED TEST ONLY //} //tools.createCheckboxWithLabel('input', 'lock scale', 'checkbox', '', '', 'scaleLock-checkbox', 'myDiv'); var sliderTranslateX = new slider("Translate X", "translateXSlider", "myDiv", -1000, 1000, 1, 0); sliderTranslateX.element.onmousemove = function(){ var sVal = parseFloat(sliderTranslateX.element.value).toFixed(2); sliderTranslateX.updateLabel(); video.translateX(sVal); }; var sliderTranslateY = new slider("Translate Y", "translateYSlider", "myDiv", -1000, 1000, 1, 0); sliderTranslateY.element.onmousemove = function(){ var sVal = parseFloat(sliderTranslateY.element.value).toFixed(2); sliderTranslateY.updateLabel(); video.translateY(sVal); }; //matrix(scaleX(),skewY(),skewX(),scaleY(),translateX(),translateY()): var video = { g_scaleX: 1, g_scaleY: 1, g_skewX: 0, g_skewY: 0, g_translateX: 0, g_translateY: 0, matrix2d: function(){ var vid = document.getElementsByClassName(video.className)[0]; vid.setAttribute('style', 'transform:matrix(' + this.g_scaleX + "," + this.g_skewY + "," + this.g_skewX + "," + this.g_scaleY + "," + this.g_translateX + "," + this.g_translateY + ')'); }, className: 'html5-video-container', scaleX : function(_scaleX){ this.g_scaleX = _scaleX; video.matrix2d(); }, scaleY : function(_scaleY){ this.g_scaleY = _scaleY; video.matrix2d(); }, translateX : function(_translateX){ this.g_translateX = _translateX; video.matrix2d(); }, translateY : function(_translateY){ this.g_translateY = _translateY; video.matrix2d(); }, }; //var lfchkbx = document.getElementById('LabelForCheckbox'); //lfchkbx.setAttribute('for', 'lockScaleCheckbox'); //var scaleChkbx = document.getElementById('lockScaleCheckbox'); //scaleChkbx.checked = true;
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址