Greasy Fork is available in English.

disney+ auto speed

可自由增減disney+影片播放速度

// ==UserScript==
// @name         disney+ auto speed
// @namespace    http://tampermonkey.net/
// @version      0.2.2
// @description  可自由增減disney+影片播放速度
// @author       YC白白
// @match        https://www.disneyplus.com/*
// @icon         https://www.google.com/s2/favicons?domain=disneyplus.com
// @run-at       document-end
// @grant        unsafeWindow
// @license      AGPL
// ==/UserScript==

// v0.1 可自由增減 disney+ 影片播放速度
// v0.2 新增調整影片速度的 "+" "-" 按鈕

/*
增減speed鍵盤快捷鍵:
c:加速
x:減速
z:回到一倍速
*/

// 提示Speed,會逐漸消失
let showSpeed = document.createElement("div")
let st = ""
showSpeed.style.position = "fixed"
showSpeed.style.zIndex = "100001"
showSpeed.style.top = "0px"
showSpeed.style.left = "0px"
showSpeed.style.color = "#55558e"
showSpeed.style.fontSize = "60px"
showSpeed.id = "hint"
showSpeed.innerHTML = ''
document.body.prepend(showSpeed)

let stPlusMinus = setInterval(function(){
    if (document.querySelector(".fullscreen-icon")) {
        // console.log("發現fullscreen")
        let itm = document.querySelector(".fullscreen-icon")

        // 創建 "-" 按鈕
        let btnMinus = itm.cloneNode(true)
        btnMinus.innerHTML = "-"
        btnMinus.id = "button2"
        btnMinus.ariaLabel = '速度-'
        btnMinus.style.backgroundColor = "white"
        btnMinus.onclick = function(){
            if (document.querySelector("video").playbackRate > 0.1) {
                document.querySelector("video").playbackRate = Math.round((document.querySelector("video").playbackRate - 0.1) * 10) / 10
            }
            let hintStr = `speed = ${document.querySelector("video").playbackRate}`
            console.log(hintStr)
            showhint(hintStr)
        }
        pos = document.querySelector(".audio-control")
        pos.parentElement.insertBefore(btnMinus, pos)

        // 創建 "+" 按鈕
        let btnPlus = itm.cloneNode(true)
        btnPlus.innerHTML = "+"
        btnPlus.id = "button1"
        btnPlus.ariaLabel = '速度+'
        btnPlus.style.backgroundColor = "white"
        btnPlus.onclick = function(){
            document.querySelector("video").playbackRate = Math.round((document.querySelector("video").playbackRate + 0.1) * 10) / 10
            let hintStr = `speed = ${document.querySelector("video").playbackRate}`
            console.log(hintStr)
            showhint(hintStr)
        }
        pos = document.querySelector(".audio-control")
        pos.parentElement.insertBefore(btnPlus, pos)

        clearInterval(stPlusMinus)
    }
}, 1000)


function showhint(nowSpeed) {
    clearInterval(st)
    // 提示從這邊開始滑
    showSpeed.style.top = "160px"
    showSpeed.style.left = "160px"

    let leftnum = 160
    showSpeed.innerHTML = nowSpeed
    showSpeed.style.opacity = 1
    if(showSpeed.style.opacity !=0){
        let num = 500
        // let st = setInterval(function(){
        st = setInterval(function(){
            // leftnum = leftnum + 0.5
            if (leftnum <= 200) {
                leftnum = leftnum + 320 / leftnum
            } else {
                leftnum = leftnum + 0.3
            }
            showSpeed.style.left = `${leftnum}px`
            num--
            showSpeed.style.opacity = num / 100
            if (num <= 0) {
                clearInterval(st)
                // 提示結束時,回到0,0
                showSpeed.style.top = "0px"
                showSpeed.style.left = "0px"
            }
        }, 1)
    }
}

window.addEventListener('keydown', function(key){
    // console.log(key)
    switch (key['code']) {
        case 'KeyZ' :
            document.querySelector("video").playbackRate = 1
            console.log(`speed = ${document.querySelector("video").playbackRate}`)
            showhint(`speed = ${document.querySelector("video").playbackRate}`)
            break
        case 'KeyC' :
            document.querySelector("video").playbackRate = Math.round((document.querySelector("video").playbackRate + 0.1) * 10) / 10
            console.log(`speed = ${document.querySelector("video").playbackRate}`)
            showhint(`speed = ${document.querySelector("video").playbackRate}`)
            break
        case 'KeyX' :
            if (document.querySelector("video").playbackRate > 0.1) {
                document.querySelector("video").playbackRate = Math.round((document.querySelector("video").playbackRate - 0.1) * 10) / 10
            }
            console.log(`speed = ${document.querySelector("video").playbackRate}`)
            showhint(`speed = ${document.querySelector("video").playbackRate}`)
            break
    }
})