滑动器6

控制网页自动向上滑动的速度

// ==UserScript==
// @name         滑动器6
// @namespace    your-namespace
// @version      1.0
// @description  控制网页自动向上滑动的速度
// @author       Your Name
// @match        http://www.htmanga3.top/*
// @grant        none
// ==/UserScript==

if (location.href.indexOf('https://www.baidu.com/s') == 0 || location.href.indexOf('http://www.baidu.com/s') == 0) {
    var jq = jQuery.noConflict();
    Compatible(jq);
    var chaoxing = false;
} else if (location.href.indexOf('chaoxing') != -1) {
    var jq = jQuery.noConflict();
    Compatible(jq);
    var chaoxing = true;
} else {
    Compatible(jQuery);
    var chaoxing = false;
}

function Compatible(jq) {
    var box = jq('<div class="move-box"><input type="number" class="move-val" value="1" title="速度"/><p class="start" title="开始/暂停">▶</p><p class="reverse" title="反方向">▼</p></div>');
    jq('body').append(box);

    (function () {
        jq('.move-box').css({
            'width': '40px',
            'height': '90px',
            'background': '#fff',
            'box-shadow': '0 0 4px 0 #ccc',
            'border-radius': '8px',
            'user-select': 'none',
            'overflow': 'hidden',
            'position': 'fixed',
            'top': '80px',
            'left': '4px',
            'z-index': 99999999
        });
        jq('.move-val').css({
            'width': '100%',
            'height': '30px',
            'padding': 0,
            'color': '#000',
            'border': 'none',
            'outline': 'none',
            'font-size': '18px',
            'text-align': 'center'
        })
        jq('.start').css({
            'margin': 0,
            'width': '100%',
            'height': '30px',
            'line-height': '30px',
            'text-align': 'center',
            'background': 'red',
            'color': '#fff',
            'font-size': '20px',
            'cursor': 'pointer'
        })
        jq('.reverse').css({
            'margin': 0,
            'width': '100%',
            'height': '30px',
            'line-height': '30px',
            'text-align': 'center',
            'color': '#ccc',
            'cursor': 'pointer'
        })
    }())

    var elinput = document.getElementsByClassName('move-val')[0],
        elstart = document.getElementsByClassName('start')[0],
        elreverse = document.getElementsByClassName('reverse')[0],
        speed = 1,
        isMove = false,
        isHide = true,
        flag = false,
        lookTop = 0,
        timers = null,
        scrollTimer = null; // 新增定时器

    // Listen for double tap events
    var clickCount = 0;
    var lastClickTime, timeoutId;
    function handleClick() {
        clickCount++;
        if (clickCount === 1) {
            lastClickTime = new Date().getTime();
            timeoutId = setTimeout(function () {
                clickCount = 0;
            }, 300);
        } else if (clickCount === 2) {
            clearTimeout(timeoutId);
            clickCount = 0;
            elstart.click(); // trigger scrolling function
        }
    }

    window.addEventListener('touchstart', handleClick);

    elinput.oninput = setIn;

    function setIn() {
        if (this.value > 10) {
            this.value = 10;
        }
        if (this.value < -10) {
            this.value = -10;
        }
        if (this.value == '') {
            this.value = 0;
        }
        speed = Number(this.value);
        speed < 0 ? elreverse.innerText = '▲' : elreverse.innerText = '▼';
    }

    elstart.onclick = function () {
        if (isMove) {
            this.innerText = '▶';
            flag = false;
            isMove = false;
            isHide = true;
            clearTimeout(scrollTimer); // 停止滚动定时器
        } else {
            this.innerText = '◉';
            flag = true;
 isMove = true;
        isHide = false;
        move(); // 开始滚动
    }
    hideShow();
}

elreverse.onclick = function () {
    speed = -speed;
    speed < 0 ? this.innerText = '▲' : this.innerText = '▼';
}

function move() {
    if (flag) {
        var imglook = jq('.imglook');
        if (imglook.length === 0) {
            window.scrollBy(0, speed);
            if (chaoxing && jq(window).height() + jq(window).scrollTop() >= jq(document).height() - 180) {
                if ($('#loadbutton').length == 1) {
                    clearTimeout(timers);
                    $('#loadbutton').click();
                    timers = setTimeout(() => {
                        isMove ? '' : elstart.click()
                    }, 200)
                }
            }
            if (jq(window).height() + jq(window).scrollTop() >= jq(document).height() - 2 || jq(window).scrollTop() == 0) {
                elstart.innerText = '▶';
                flag = false;
                isMove = false;
                isHide = true;
                hideShow();
                return; // 结束滚动
            }
        } else {
            // 超新课程资料文件预览
            var loopNum = 0
            lookTop = imglook[0].scrollTop
            imglook[0].scrollBy(0, speed)
            function loopTest() {
                loopNum++
                setTimeout(() => {
                    if (imglook[0].scrollTop === lookTop) {
                        loopTest()
                        if (loopNum > 6) {
                            elstart.innerText = '▶';
                            flag = false;
                            isMove = false;
                            isHide = true;
                            hideShow();
                            return; // 结束滚动
                        }
                    }
                }, 200)
            }
            if (imglook[0].scrollTop === lookTop) {
                loopTest()
            }
        }

        // 滚动结束后停止1秒,再次启动滚动
        clearTimeout(scrollTimer);
        scrollTimer = setTimeout(function () {
            move();
        }, 2000);
    }
}

jq(document).keydown((e) => {
    var event = e || window.event;
    if (event.keyCode == 32) {
        elstart.click();
        return false;
    }
    if (event.keyCode == 38) {
        elinput.value++;
    }
    if (event.keyCode == 40) {
        elinput.value--;
    }
    setIn.call(elinput);
})

// 隐藏
hideShow()

function hideShow() {
    //  if(!isHide) return;
    var timer2 = null;

    function hide() {
        jq('.move-box').stop().animate({
            'left': '-30px'
        }, 400)
    }

    timer2 = setTimeout(hide, 6000);

    jq('.move-box').hover(function () {
        //  if(!isHide) return;
        clearInterval(timer2);
        jq(this).stop().animate({
            'left': '4px'
        }, 600)
    }, function () {
        //  if(!isHide) return;
        timer2 = setTimeout(hide, 6000);
    })
}
}