Auto-Scroller

Auto-Scroller, works on mobile and desktop.

// ==UserScript==
// @name        Auto-Scroller 
// @version     1.1
// @description Auto-Scroller, works on mobile and desktop.
// @license     CC0-1.0
// @author       Mane
// @match       *://*/*
// @grant       none
// @run-at      document-idle
// @namespace https://greasyfork.org/users/1491313
// ==/UserScript==

;(function(){
  'use strict';

  const SPEED       = 1;    // px per tick
  const INTERVAL_MS = 16;   // ~60fps
  let ticker = null;

  // pick the correct scroll container
  function getScroller(){
    return document.scrollingElement 
        || document.documentElement 
        || document.body;
  }

  function play(){
    if (ticker) return;
    ticker = setInterval(()=>{
      const s = getScroller();
      s.scrollTop = s.scrollTop + SPEED;
    }, INTERVAL_MS);
  }

  function pause(){
    if (!ticker) return;
    clearInterval(ticker);
    ticker = null;
  }

  // build UI once <body> exists
  function init(){
    if (!document.body){
      document.addEventListener('DOMContentLoaded', init, {once:true});
      return;
    }

    const container = document.createElement('div');
    Object.assign(container.style, {
      position:  'fixed',
      bottom:    '20px',
      right:     '20px',
      display:   'flex',
      gap:       '6px',
      zIndex:    999999
    });

    function makeButton(symbol, onClick){
      const btn = document.createElement('button');
      btn.textContent = symbol;
      Object.assign(btn.style, {
        padding:      '8px 12px',
        fontSize:     '18px',
        background:   'rgba(0,0,0,0.6)',
        color:        '#fff',
        border:       'none',
        borderRadius: '6px',
        cursor:       'pointer'
      });
      btn.addEventListener('click', onClick);
      return btn;
    }

    container.append(
      makeButton('▶️', play),
      makeButton('⏸️', pause)
    );
    document.body.appendChild(container);
  }

  init();
})();