Greasy Fork

Greasy Fork is available in English.

自动隐藏抖音header头部

2023/6/12 19:20:21

目前为 2023-06-13 提交的版本,查看 最新版本

// ==UserScript==
// @name        自动隐藏抖音header头部
// @namespace   鼠标显示隐藏抖音header头部
// @match       https://www.douyin.com/*
// @namespace   476321082
// @license      MIT
// @grant       none
// @version     0.1
// @author      -
// @description 2023/6/12 19:20:21
// ==/UserScript==

(function() {
    'use strict';
    var style = document.createElement('style');
    style.innerHTML = `
      .MiecXVmm.gCMIwEM1.WPC30Qlr {
        height: 0;
      }
    `;
    document.head.appendChild(style);
    var target = document.getElementById("douyin-header");
    var height = target.offsetHeight;
    var hidden = false;
    var menu = null;
    var isFirst = true;
    function check() {
        if (target && document.readyState === "complete") {
            if (target.style.display !== "none") {
                target.style.display = "none";
                hidden = true;
            }
            document.addEventListener("mousemove", function(e) {
                var y = e.clientY;
                if (y <= height / 2) {
                    if (hidden) {
                        target.style.display = "block";
                        hidden = false;
                    }
                } else if (y > height) { 
                    if (menu) {
                        var menuHeight = menu.offsetHeight;
                        var menuRect = menu.getBoundingClientRect();
                        var menuTop = menuRect.top;
                        var menuBottom = menuRect.bottom;
                        if (y >= menuTop && y <= menuBottom) {
                            return;
                        }
                    }
                    if (!hidden) {
                        target.style.display = "none";
                        hidden = true;
                        menu = null;
                    }
                }
            });
            var observer = new MutationObserver(function(mutations) {
                for (var mutation of mutations) {
                    if (mutation.addedNodes.length > 0 && isFirst) {
                        for (var node of mutation.addedNodes) {
                            if (node.tagName === "DIV" && target.contains(node)) {
                                menu = node;
                                isFirst = false;
                            }
                        }
                    }
                    if (mutation.target.tagName === "DIV" && mutation.attributeName === "class") {
                        menu = mutation.target;
                    }
                }
            });
            var options = {
                childList: true,
                subtree: true,
                attributes: true,
                attributeFilter: ["class"]
            };
            observer.observe(target, options);
            target.addEventListener('mouseover', function(e) {
                if (e.target.tagName === 'DIV' && target.contains(e.target)) {
                    isFirst = true;
                }
            });
        } else {
            setTimeout(check, 100);
        }
    }
    check();
})();