New YouTube Obnoxious Bar Fix

Works as of 18-Oct-2021, prevents the search bar from following as you scroll down the page

目前為 2021-10-18 提交的版本,檢視 最新版本


    // ==UserScript==
    // @name        New YouTube Obnoxious Bar Fix
    // @description Works as of 18-Oct-2021, prevents the search bar from following as you scroll down the page
    // @include     https://www.youtube.com/*
    // @grant       none
    // @version 0.0.12
    // @namespace https://gf.qytechs.cn/users/8233
    // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
    // ==/UserScript==
    function adjustBar(x)
    {
      document.getElementById('masthead-container').style.position = 'absolute';
      //if above is 'absolute' and not 'static' this must be commented out or the header will overlap the vid
      //document.getElementById('page-manager').style['margin-top'] = 0;
      if(document.getElementById('frex-downbut') !== null)
        return;
     
      var downbut = document.createElement('button');
      downbut.id = 'frex-downbut';
      downbut.innerHTML = '\u25BC';
      downbut.style.background = 'none';  
      downbut.style.color = 'red';
      downbut.style.border = 'none';
     
      var endnode = document.getElementById('end');
      endnode.parentElement.insertBefore(downbut, endnode);
      
      downbut.onclick = function () {
        var cont = document.getElementById('end').parentElement;
        window.scrollTo(0, Math.max(0, cont.offsetHeight - 10));
      };
     
      downbut.click();
    }
    waitForKeyElements('h1.title', adjustBar);//kinda a hack - this will only trigger first time a watch page is accessed
    /*--- waitForKeyElements():  A utility function, for Greasemonkey scripts,
        that detects and handles AJAXed content. License: CC0/PD, From: https://git.io/vMmuf
     
        Usage example:
     
            waitForKeyElements (
                "div.comments"
                , commentCallbackFunction
            );
     
            //--- Page-specific function to do what we want when the node is found.
            function commentCallbackFunction (jNode) {
                jNode.text ("This comment changed by waitForKeyElements().");
            }
     
        IMPORTANT: This function requires your script to have loaded jQuery.
    */
    function waitForKeyElements(selectorTxt, /* Required: The jQuery selector string that
                            specifies the desired element(s).
                        */
    actionFunction, /* Required: The code to run when elements are
                            found. It is passed a jNode to the matched
                            element.
                        */
    bWaitOnce, /* Optional: If false, will continue to scan for
                            new elements even after the first match is
                            found.
                        */
    iframeSelector /* Optional: If set, identifies the iframe to
                            search.
                        */
    ) {
      var targetNodes,
      btargetsFound;
      if (typeof iframeSelector == 'undefined')
      targetNodes = $(selectorTxt);
       else
      targetNodes = $(iframeSelector).contents().find(selectorTxt);
      if (targetNodes && targetNodes.length > 0) {
        btargetsFound = true;
        /*--- Found target node(s).  Go through each and act if they
                are new.
            */
        targetNodes.each(function () {
          var jThis = $(this);
          var alreadyFound = jThis.data('alreadyFound') || false;
          if (!alreadyFound) {
            //--- Call the payload function.
            var cancelFound = actionFunction(jThis);
            if (cancelFound)
            btargetsFound = false;
             else
            jThis.data('alreadyFound', true);
          }
        });
      } 
      else {
        btargetsFound = false;
      }  //--- Get the timer-control variable for this selector.
     
      var controlObj = waitForKeyElements.controlObj || {
      };
      var controlKey = selectorTxt.replace(/[^\w]/g, '_');
      var timeControl = controlObj[controlKey];
      //--- Now set or clear the timer as appropriate.
      if (btargetsFound && bWaitOnce && timeControl) {
        //--- The only condition where we need to clear the timer.
        clearInterval(timeControl);
        delete controlObj[controlKey]
      } 
      else {
        //--- Set a timer, if needed.
        if (!timeControl) {
          timeControl = setInterval(function () {
            waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector
            );
          }, 300
          );
          controlObj[controlKey] = timeControl;
        }
      }
      waitForKeyElements.controlObj = controlObj;
    }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址