您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a simple volume control to scores on MuseScore.com.
// ==UserScript== // @name MuseScore Volume Control // @name:de MuseScore Lautstärke-Regler // @namespace http://tampermonkey.net/ // @version 1.1 // @description Adds a simple volume control to scores on MuseScore.com. // @description:de Fügt einen einfachen Lautstärke-Regler zu Notenblättern auf MuseScore.com ein. // @author klischee // @match https://musescore.com/*/* // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function() { 'use strict'; class MSVolume { constructor() { // Wait some time for the play btn and do the stuff when it appears let i = setInterval((e) => { let btn = this.getPlayBtn(); if(!btn) return false; btn.addEventListener('click', (e) => { this.onPlayBtn(); }); this.insertSlider(); clearInterval(i); }, 100); setTimeout(() => { clearInterval(i); }, 5000); } getPlayer() { if(this.player) return this.player; this.player = document.querySelector('.uniqueplayerclass'); return this.player; } getPlayBtn() { if(this.playBtn) return this.playBtn; this.playBtn = document.querySelector('button[title="Toggle Play"]'); return this.playBtn; } onPlayBtn() { let interval = setInterval(() => { let player = this.getPlayer(); this.setVol(); if(player) clearInterval(interval); }, 100); } setVol() { let player = this.getPlayer() let volume = this.getVol(); GM_setValue('volume', volume); if(player) this.player.volume = volume / 100; } getVol() { return this.volSlider.value; } insertSlider() { let volume = GM_getValue('volume'); if(!volume) volume = 100; let volSlider = document.createElement('div'); volSlider.style.display = 'grid'; volSlider.innerHTML = `<input type="range" min="0" max="100" value="${volume}">`; let playBtn = this.getPlayBtn(); let playBtnParent = playBtn.parentNode; this.insertAfter(volSlider, playBtnParent); this.volSlider = volSlider.querySelector('input'); this.volSlider.addEventListener('input', (e) => { this.setVol(); }); return true; } insertAfter(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } } new MSVolume(); })();