移动设备全屏浏览

长按右下角

// ==UserScript==
// @name         移动设备全屏浏览
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  长按右下角
// @author       Gemini
// @match        *://*/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 全屏切换
    function isFullscreen() {
        return document.fullscreenElement ||
            document.webkitFullscreenElement ||
            document.mozFullScreenElement ||
            document.msFullscreenElement;
    }
    function toggleFullscreen() {
        if (!isFullscreen()) {
            if (document.documentElement.requestFullscreen) document.documentElement.requestFullscreen();
            else if (document.documentElement.webkitRequestFullscreen) document.documentElement.webkitRequestFullscreen();
            else if (document.documentElement.mozRequestFullScreen) document.documentElement.mozRequestFullScreen();
            else if (document.documentElement.msRequestFullscreen) document.documentElement.msRequestFullscreen();
        } else {
            if (document.exitFullscreen) document.exitFullscreen();
            else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
            else if (document.mozCancelFullScreen) document.mozCancelFullScreen();
            else if (document.msExitFullscreen) document.msExitFullscreen();
        }
    }

    // 长按屏幕右下角切换全屏
    let timer = null;
    const PRESS_MS = 500; // 长按时间,毫秒
    const AREA_SIZE = 60; // 右下角热区的大小(像素)

    function inRightBottomCorner(x, y) {
        return (
            x > window.innerWidth - AREA_SIZE &&
            y > window.innerHeight - AREA_SIZE
        );
    }

    document.addEventListener('touchstart', function(e) {
        const t = e.touches[0];
        if (inRightBottomCorner(t.clientX, t.clientY)) {
            timer = setTimeout(() => {
                toggleFullscreen();
                timer = null;
            }, PRESS_MS);
        }
    }, {passive:true});

    document.addEventListener('touchend', function() {
        if (timer) {
            clearTimeout(timer);
            timer = null;
        }
    });
    document.addEventListener('touchmove', function(e) {
        if (!timer) return;
        const t = e.touches[0];
        if (!inRightBottomCorner(t.clientX, t.clientY)) {
            clearTimeout(timer);
            timer = null;
        }
    });
})();