Unfix

Unfixes all fixed elements such as navigation bar and keeps them unfixed. Keybind: ctrl+alt+u

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         Unfix
// @namespace    com.gmail.fujifruity.greasemonkey
// @version      1.2
// @description  Unfixes all fixed elements such as navigation bar and keeps them unfixed. Keybind: ctrl+alt+u
// @author       fujifruity
// @match        *://*/*
// @grant        none
// ==/UserScript==

{
    const cssOf = e => document.defaultView.getComputedStyle(e, '')

    const isFixed = e => ['fixed', 'sticky'].includes(cssOf(e).position)

    const unfix = e => {
        if (!isFixed(e)) return
        if (e.id == 'fujifruity-toc') return
        e.style.setProperty('position', 'unset', 'important')
        console.log('unfixed: ', e)
    }

    // Keeps all elements unfixed
    const unfixForever = () => {
        // Unfix all fixed elements
        const allElems = Array.from(document.body.getElementsByTagName("*"))
        allElems.forEach(unfix)

        // Start observing elements get fixed
        const observer = new window.MutationObserver((mutationRecords) => {
            mutationRecords.forEach((mutationRecord) => {
                unfix(mutationRecord.target)
            })
        })
        const config = { attributes: true, subtree: true }
        observer.observe(document.body, config)
    }

    // Set keybinds
    window.addEventListener('keydown', event => {
        if (!event.altKey && !event.metaKey || !event.ctrlKey || event.key != 'u') return
        unfixForever()
    })
}