您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
・。・
// ==UserScript== // @name Typingtube拡張new02 // @license MIT // @namespace http://tampermonkey.net/ // @version 1.3 // @description ・。・ // @author つべ // @match https://typing-tube.net/movie/show* // @icon https://www.gEoogle.com/s2/favicons?sz=64&domain=typing-tube.net // @grant none // ==/UserScript== const settings = { videoBelow: true, // 動画を下に配置 scroll: true, // 指定場所までエンターでスクロール showKPM: false, // KPM表示 showPossibleScore: true, // 達成可能スコア表示 }; const scrollDistance = -15; /*指定場所までエンターでスクロールが有効のときのみ*/ /*スクロールの高さ調整。マイナスにすると上に、プラスにすると下に行きます。*/ let is_play = false; let is_keydown_addEventListener = false; function moveVideoBelow(){ const YOUTUBE = document.getElementById("youtube-movie"); const TYPING_AREA = document.getElementById("controlbox"); YOUTUBE.parentNode.insertBefore(YOUTUBE,TYPING_AREA.nextSibling); /*動画下に表示 Toshi氏のを借用*/ } function addTypingLineListContainer(){ document.getElementsByClassName('modal-content')[1].insertAdjacentHTML('beforeend',`<div class="modal-body" id="typing-line-list-container"></div>`); } /*F4等で消えてしまったResult表示のdivを追加*/ function hideRanks(){ document.getElementById('status').style.display = 'block' document.getElementById('ranking_roma').style.display = 'none' document.getElementById('ranking_kana').style.display = 'none' document.getElementById('ranking_flick').style.display = 'none' }; /*エンターを押したら下の表示をstatusに切り替えてその他を表示しなくする*/ function updateKPMAndPossibleScore() { if (!is_play) return; if (settings.showKPM && !document.getElementById('line-speed-kpm')) { document.getElementById('line_remaining_time').insertAdjacentHTML("beforeend", ` - <span id="line-speed-kpm">0KPM</span>`); } if (settings.showPossibleScore && !document.getElementById('PS')) { document.getElementById('score-value').insertAdjacentHTML("afterend", `<span id="PS" style="font-size: 0.7em; color: rgb(204, 153, 204);">0</span>`); } if (settings.showKPM) { //document.getElementById("line-speed-kpm").textContent = `${Math.floor(line_typingspeed * 60)}KPM`; } if (settings.showPossibleScore) { const scoreParChar = parseLyric.scoreParChar const possibleScore = (200000 - ((lineResult.lostTypeLength * scoreParChar) +(typingCounter.missCount * (scoreParChar / 4)) )) / 2000 document.getElementById("PS").textContent = Math.round(possibleScore * 100) / 100; } } function Event_func(e){ if (is_play && is_keydown_addEventListener) { updateKPMAndPossibleScore(); } if (e.code === 'Enter' && settings.scroll) { document.getElementById("tab w-100").scrollIntoView(true); scrollBy(0, scrollDistance); hideRanks(); } if (e.code === 'F4') { addTypingLineListContainer(); } }; (function() { if (!is_keydown_addEventListener) { is_keydown_addEventListener = true; document.addEventListener('keydown', Event_func); } })(); document.getElementById('restart').addEventListener('click', addTypingLineListContainer); if (settings.videoBelow) { moveVideoBelow(); } //書き換えここから onPlayerStateChange = function (event) { switch(event.data){ case 1: //再生(player.playVideo) console.log("再生 1") PlayerEvent.play() is_play = true; break; case 0: //プレイ終了(最後まで再生した) case 5://動画停止(途中でStopVideo) if(event.data == 0){ console.log("プレイ終了 0") is_play = false; }else{ console.log("動画停止 5") is_play = false; } PlayerEvent.end() break; case 2 : //一時停止(player.pauseVideo) console.log("一時停止 2") PlayerEvent.pause() is_play = false; break; case 3: //再生時間移動 スキップ(player.seekTo) console.log("シーク 3") PlayerEvent.seek() break; case -1: // 未スタート、他の動画に切り替えた時など console.log("未スタート -1") PlayerEvent.ready() is_play = false; break; } } document.addEventListener("keydown",(e)=>{ if(e.code === 'Escape' && !is_play) player.playVideo(); })