☄️拷贝漫画增强1☄️

拷贝漫画去广告🚫,对日漫版漫画页进行增强:并排布局📖、图片高度自适应↕️、辅助翻页↔️、页码显示⏱、侧边目录栏📑、暗夜模式🌙,请设置即时注入模式以避免页面闪烁⚠️

// ==UserScript==
// @name         ☄️拷贝漫画增强1☄️
// @namespace    http://tampermonkey.net/
// @version      4.3.7
// @description  拷贝漫画去广告🚫,对日漫版漫画页进行增强:并排布局📖、图片高度自适应↕️、辅助翻页↔️、页码显示⏱、侧边目录栏📑、暗夜模式🌙,请设置即时注入模式以避免页面闪烁⚠️
// @author       CY
// @match        *://copymanga.com/*
// @match        *://*.copymanga.com/*
// @match        *://*.copymanga.org/*
// @match        *://*.copymanga.net/*
// @match        *://*.copymanga.info/*
// @match        *://*.copymanga.site/*
// @match        *://*.copymanga.tv/*
// @match        *://*.mangacopy.com/*
// @match        *://copymanga.com/*
// @match        *://copymanga.org/*
// @match        *://copymanga.net/*
// @match        *://copymanga.info/*
// @match        *://copymanga.site/*
// @match        *://copymanga.tv/*
// @match        *://mangacopy.com/*
// @license      GNU General Public License v3.0 or later
// @resource     animate_css https://cdn.jsdelivr.net/npm/[email protected]/animate.min.css
// @resource     element_css https://unpkg.com/[email protected]/lib/theme-chalk/index.css
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/toastr.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/jquery.cookie.js
// @require      https://unpkg.com/[email protected]/lib/index.js
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @run-at       document-start
// ==/UserScript==
function hiddenCursor(body) {
    // 隐藏鼠标
    originalCursor = body.css('cursor');
    body.css({'cursor': 'none'});
}

function showCursor(body) {
    body.css({'cursor': originalCursor});
}

function msgTips(msg, type) {
    if (type === undefined) type = 'info'
    toastr[type](msg);
}

function checkFullScreen() {
    if (document.fullscreenElement) {
        document.exitFullscreen();
    } else {
        document.documentElement.requestFullscreen();
    }
}

let upLoopIndex = 0;
let downLoopIndex = 0;
let info_app;

function checkDownUp(type, index, func) {
    if (type === 0 && downLoopIndex === index) {
        func();
    } else if (type === 1 && upLoopIndex === index) {
        func();
    }
}

function scoll(type, func, time = 300) {
    var index = 0;
    if (type === 0) {
        index = ++downLoopIndex;
        setTimeout(function () {
            checkDownUp(0, index, func);
        }, time);
    } else if (type === 1) {
        index = ++upLoopIndex;
        setTimeout(function () {
            checkDownUp(1, index, func);
        }, time);
    }
}

function fireKeyEvent(el, evtType, keyCode, ctrlKey = false) {
    let evtObj;
    if (document.createEvent) {
        if (window.KeyEvent) {//firefox 浏览器下模拟事件
            evtObj = document.createEvent('KeyEvents');
            evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0);
        } else {//chrome 浏览器下模拟事件
            el.focus();
            evtObj = new KeyboardEvent(evtType, {
                keyCode: keyCode,
                location: 0,
                repeat: false,
                isComposing: false
            });

            if (ctrlKey) {
                if (typeof evtObj.ctrlKey === 'undefined') {//为了模拟ctrl键
                    Object.defineProperty(evtObj, "ctrlKey", {value: true});
                } else {
                    evtObj.ctrlKey = true;
                }
            }
        }
        el.dispatchEvent(evtObj);

    } else if (document.createEventObject) {//IE 浏览器下模拟事件
        evtObj = document.createEventObject();
        evtObj.keyCode = keyCode
        el.fireEvent('on' + evtType, evtObj);
    }
}

let originalCursor = 'auto';
let changeCursorType = true;
let img_id = 0;
let skip_null_img_map = new Map();
let scrollDown = function () {
};
let scrollUp = function () {
};
$(document).ready(function () {
    //设置 toastr 显示配置
    toastr.options = {
        closeButton: false,
        debug: false,
        progressBar: false,
//        positionClass: "toast-top-center",
        onclick: null,
        showDuration: "300",
        hideDuration: "1000",
        timeOut: "5000",
        extendedTimeOut: "1000",
        showEasing: "swing",
        hideEasing: "linear",
        showMethod: "fadeIn",
        hideMethod: "fadeOut"
    };

    let bodyDom = $('body');
    if ($('.comicContent').length > 0) {
        msgTips('检测到漫画内容页', 'info');
        document.onfullscreenchange = function (event) {
            console.log("FULL SCREEN CHANGE")
            if (document.fullscreenElement) {
                GM_setValue('copymanga.com_fullScreenType', true);
            } else {
                GM_setValue('copymanga.com_fullScreenType', false);
            }
        };
        if (GM_getValue('copymanga.com_fullScreenType', false) === true) {
            setTimeout(function () {
                msgTips('记忆全屏状态', 'info');
                document.documentElement.requestFullscreen();
            }, 1500);
        }
        hiddenCursor(bodyDom);
        window.addEventListener("mousemove", function () {
            if (changeCursorType) {
                changeCursorType = false;
                showCursor(bodyDom);
                scoll(1, function () {
                    hiddenCursor(bodyDom);
                    changeCursorType = true;
                }, 500);
            }
        }, true);
    }

});

function flushImageId() {
    let $img = $('.comicContent ul img');
    let count_lm = $($('.comicCount')[0]);
    let count_1 = count_lm.html();
    count_lm.parent().hide();
    let count_2 = $img.length;
    if (count_2 > count_1) {
        count_1 = count_2;
    }
    window.g_max_pic_count = count_1 ? count_1 : count_2;
    info_app.pic_count = count_1 ? count_1 : count_2;
    $.each($img, function (index) {
        this.setAttribute('id', 'img_' + (index + 1));
    });
    $('.comicContent-list').removeClass('comicContent-list');
}

function initStyle() {
    GM_addStyle('.comicContent-list{width:100% !important;}')
    //固定header
    GM_addStyle('.header{position:unset !important;}')
    //去除footer
    GM_addStyle('.footer{display:none !important;}')
    //文字居中
    GM_addStyle('body{text-align:center !important;font-size:12px !important;line-height: normal !important;}')
    //图片居中
    GM_addStyle('ul{padding:0px !important;}')
    //body全屏
    GM_addStyle('body{height:unset !important;}')
    //修改滚动条样式
    GM_addStyle('::-webkit-scrollbar {width: 4px;height: 0px;}')
    GM_addStyle('::-webkit-scrollbar-thumb {background-color: rgb(48,48,48);border-radius: 2px;}')
    //修改element-ui样式
    GM_addStyle('.el-menu{border-right:0px !important;}')
    GM_addStyle('.el-drawer__wrapper{width:20%;}')
    GM_addStyle('.el-drawer{background:transparent !important;}')
    GM_addStyle('.el-drawer__body{background:rgba(0,0,0,.8) !important;overflow-y: auto}')
    //去除图片边框
    GM_addStyle('.comicContent{margin-top:20px;user-select: none;}')
    GM_addStyle('.comicContent img{margin-bottom: 50px !important;width:unset !important;}')
    //漫画双页排布
    GM_addStyle('.page_double .comicContent ul{justify-content:center;flex-direction: row-reverse;display: flex;flex-wrap: wrap;}')
    GM_addStyle('.page_double .comicContent img{height:100vh !important;}')
    GM_addStyle('.comicContent-image-list{width:unset !important;}')
    //引入css
    const animate_css = GM_getResourceText("animate_css");
    const element_css = GM_getResourceText("element_css");
    //const toastr_css = GM_getResourceText("toastr_css");
    const toastr_css = '.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#FFF}.toast-message a:hover{color:#CCC;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51A351}.toast-error{background-color:#BD362F}.toast-info{background-color:#2F96B4}.toast-warning{background-color:#F89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}}';
    GM_addStyle(animate_css);
    GM_addStyle(element_css);
    GM_addStyle(toastr_css);
    GM_addStyle(':root{--animate-duration:500ms;}')
    //更改跨页
    GM_addStyle('.skip{display:none !important;}')
    //日间模式
    GM_addStyle("body{background:#edecea !important;}")
    //夜间模式
    GM_addStyle("html{background:transparent !important;}")
    GM_addStyle(".dark_mode body{background:#212121 !important;}")
    //读取cookie
    if ($.cookie('dark_mode') === undefined) {
        $.cookie('dark_mode', true, {expires: 999999, path: '/'});
    }
    if ($.cookie('page_double') === undefined) {
        $.cookie('page_double', true, {expires: 999999, path: '/'});
    }
    if ($.cookie('auto_skip') === undefined) {
        $.cookie('auto_skip', false, {expires: 999999, path: '/'});
    }
}

function getImgId() {
    if (!img_id) {
        img_id=1;
        flushImageId(info_app);
        imageTop(img_id);
    }
    return img_id;
}

function skip(image_id = 0) {
    let skip_null_img_el = $('<img />');
    let skip_null_img_li = $('<li></li>');
    let this_image_id = image_id > 0 ? image_id : getImgId();
    if (img_id % 2 === 0) {
        this_image_id = img_id - 1;
    }
    if (this_image_id <= 0) {
        this_image_id = 1;
    }
    let this_image = $('#img_' + this_image_id);
    let css_object = {
        width: this_image.parent().css('width'),
        height: '100vh',
    };
    let img_id_map_index_key = '';
    while (!img_id_map_index_key) {
        img_id_map_index_key = Math.random().toString(36).slice(-8);
    }
    skip_null_img_el.addClass('nullImagePlaceholder').attr('data-img-id-map-index-key', img_id_map_index_key).css(css_object);
    skip_null_img_li.css(css_object);
    skip_null_img_li.append(skip_null_img_el);
    this_image.parent().before(skip_null_img_li);
    if (!img_id) {
        img_id = 1;
    } else {
        img_id++;
    }
    let skip_null_img = {
        null_img: skip_null_img_el,
        null_img_li: skip_null_img_li,
        this_image: this_image,
        interval: setInterval(function() {
            if(skip_null_img!==null && skip_null_img.this_image.parent().css('width') !== skip_null_img.null_img.css('width')) {
                skip_null_img.null_img.css({
                    width: skip_null_img.this_image.parent().css('width'),
                });
                skip_null_img.null_img_li.css({
                    width: skip_null_img.this_image.parent().css('width'),
                });
            }
        }, 1000)
    };
    skip_null_img_map.set(img_id_map_index_key, skip_null_img);

    flushImageId(info_app);
    imageTop();
}

function skipClean(this_image_clean = false) {
    msgTips('开始清除占位图片', 'info');
    if (this_image_clean) {
        let this_img_id = getImgId();
        let this_img_el = $('#img_'+ this_img_id);
        while (!this_img_el.hasClass('nullImagePlaceholder')){
            this_img_id -= 1;
            if (this_img_id <= 0) {
                msgTips('前面没有占位图片了', 'warning');
                return;
            }
            this_img_el = $('#img_'+ this_img_id);
        }
        let map_key = this_img_el.attr('data-img-id-map-index-key');
        let img_object = skip_null_img_map.get(map_key);
        if (typeof img_object !== 'undefined') {
            clearInterval(img_object.interval);
            img_object.null_img_li.remove();
            img_id--;
        }
        skip_null_img_map.delete(map_key);
        msgTips('清除单张占位图片成功', 'success');
    } else {
        if (skip_null_img_map.size <= 0) {
            msgTips('没有占位图片', 'warning');
            return;
        }
        skip_null_img_map.forEach(function (img_object, key) {
            if (typeof img_object !== 'undefined') {
                clearInterval(img_object.interval);
                img_object.null_img_li.remove();
                img_id--;
            }
            skip_null_img_map.delete(key);
        });
        msgTips('清除全部占位图片成功', 'success');
    }
    flushImageId(info_app);
}

function imageTop(img_id_bak = 0, time=500) {
    if (img_id !== (window.g_max_pic_count + 1)) {
        $("html").stop();
    }
    info_app.img_id = img_id;

    let img_id_key = "#img_" + img_id;
    if ($(img_id_key).offset()) {
        $("html").animate({scrollTop: $(img_id_key).offset().top}, time);
    } else {
        flushImageId(info_app);
        if ($(img_id_key).offset()) {
            $("html").animate({scrollTop: $(img_id_key).offset().top}, time);
        } else {
            if (img_id_bak > 0) {
                img_id = img_id_bak;
                info_app.img_id = img_id_bak;
            }
            return false;
        }
    }
    return true;
}

(function () {
    'use strict';
    //去广告
    GM_addStyle('*[style*="position: relative;"]{display:none !important;}')
    GM_addStyle('.header-jum{display:none !important;}')
    GM_addStyle('.comicContainerAds{display:none !important;}')
    //漫画页检测
    if (location.href.indexOf("chapter") >= 0) {
        initStyle();
        let dark_mode = $.cookie('dark_mode') === 'true';
        let page_double = $.cookie('page_double') === 'true';
        let auto_skip = $.cookie('auto_skip') === 'true';
        //暗夜模式
        if (dark_mode) {
            $('html').addClass('dark_mode');
        } else {
            $('html').removeClass('dark_mode');
        }
        //双页显示
        if (page_double) {
            $('html').addClass('page_double');
        } else {
            $('html').removeClass('page_double');
        }
        let middle = 0;
        let ch_id = 0;
        //延迟加载
        $(function delay() {
            //$('.comicContent-list').removeClass('comicContent-list');
            //计算页数
            if (typeof (g_max_pic_count) == 'undefined') {
                window.el = $('<iframe src="' + $('.list a').attr('href') + '" style="display:none;"></iframe>');
                $('body').append(window.el);
                var count_lm = $($('.comicCount')[0]);
                var count_1 = count_lm.html();
                count_lm.parent().hide();
                window.g_max_pic_count = count_1 ? count_1 : 3;
            }
            setTimeout(function() {
                //自动跨页
                if (auto_skip) {
                    flushImageId();
                    skip(1);
                    msgTips('自动跨页 - 开启', 'info');
                } else {
                    msgTips('自动跨页 - 关闭', 'info');
                }
            }, 1000);
            //去除憨批类
            $('.comicContent-image-all').removeClass('comicContent-image-all');
            $('.container').removeClass('container');
            $('.comicContent-image-1').removeClass('comicContent-image-1');
            $('.comicContent-image-2').removeClass('comicContent-image-2');
            $('.comicContent-image-3').removeClass('comicContent-image-3');
            $('.comic-size-1').removeClass('comic-size-1');
            $('.comic-size-2').removeClass('comic-size-2');
            $('.comic-size-3').removeClass('comic-size-3');
            //添加图片id
            info_app && flushImageId(info_app);
            //预加载图片
            $('.comicContent img').addClass('lazypreload');
            //去除原来的jquery事件
            jQuery = unsafeWindow['jQuery'];
            jQuery("body").off("keydown");
            jQuery(".inner_img a").off("click");
            //上下方向键滚动页面,左右方向键切换章节
            scrollUp = function () {
                let img_id_bak = img_id;
                if (middle == 0 || img_id == g_max_pic_count + 1) {
                    if (img_id >= 1) {
                        if ($("#img_" + img_id).length > 0 && $("#img_" + (img_id - 1)).length > 0 && $("#img_" + img_id).offset().top == $("#img_" + (img_id - 1)).offset().top) {
                            img_id -= 2;
                        } else {
                            img_id -= 1;
                        }
                    }
                }
                middle = 0;
                if (!imageTop(img_id_bak)) {
                    msgTips('这是第一页', 'warning');
                }
            }
            scrollDown = function () {
                let img_id_bak = img_id;
                if (img_id <= window.g_max_pic_count) {
                    let image_string = "#img_" + img_id;
                    let image_next_string = "#img_" + (img_id + 1);
                    if ($(image_string).length > 0 && $(image_next_string).length > 0 && $(image_string).offset() && $(image_string).offset().top === $(image_next_string).offset().top) {
                        img_id += 2;
                    } else {
                        img_id += 1;
                    }
                }
                middle = 0;
                if (!imageTop(img_id_bak)) {
                    msgTips('这是最后一页了', 'warning');
                }
            }

            function goAhead() {
                msgTips('下一章', 'success');

                let location_new = $('.footer>div:nth-child(4) a').attr("href");
                if (location_new.indexOf("chapter") >= 0) {
                    location.href = location_new;
                } else {
                    msgTips('这是最后一章了', 'error');
                }
            }

            function goBack() {
                msgTips('上一页', 'success');

                let location_new = $('.footer>div:nth-child(2) a').attr("href");
                if (location_new.indexOf("chapter") >= 0) {
                    location.href = location_new;
                }
            }


            $(".comicContent").click(function (event) {
                event.stopPropagation();
                if (document.fullscreenElement) {
                    scrollDown();
                    return;
                }
                if (event.clientY > $(window).height() / 2) {
                    // fireKeyEvent(document.getElementsByTagName('body')[0], 'keydown', 40);
                    scrollDown();
                } else {
                    scrollUp();
                }
                return false;
            });
            $("body").keydown(function (event) {
                console.log(event);

                if (event.ctrlKey || event.metaKey) {
                    return true;
                }

                switch (event.keyCode) {
                    case 38:
                        scrollUp();
                        break;
                    case 32:
                    case 40:
                        scrollDown();
                        break;
                    case 37:
                        goBack();
                        break;
                    case 39:
                        goAhead();
                        break;
                    case 13:
                    case 70:
                        checkFullScreen();
                        break;
                    case 67:
                    case 96:
                    case 97:
                        info_app.switch_skip();
                        break;
                    case 88:
                        skipClean();
                        break;
                    case 90:
                        skipClean(true);
                        break;
                    case 76:
                        info_app.collect();
                        break;
                    case 84:
                       info_app.switch_hide_time();
                       break;
                    case 84:
                        info_app.collection_status_emoji_flash();
                        break;
                    case 71:
                        info_app.switch_flash_good_css();
                        break;
                    default:
                        return true;
                }
                return false;
            });
            document.onmousedown = function (event) {
                // 鼠标键位监听
                if (document.fullscreenElement) {
                    var b_code = event.button;
                    if (b_code == 1 || b_code == 3 || b_code == 4) {
                        if (b_code == 1) {
                            info_app.switch_skip();
                        }

                        if (b_code == 4) {
                            goAhead();
                        }

                        if (b_code == 3) {
                            goBack();
                        }

                        return false;
                    }
                }
            }
            // 拦截右键
            document.oncontextmenu = function (event) {
                if (document.fullscreenElement) {
                    event.preventDefault();
                    scrollUp();
                }
            }
            // 禁用鼠标滚轮
            window.addEventListener('mousewheel', function (event) {
                if (document.fullscreenElement) {
                    scoll(0, function () {
                        msgTips('全屏状态禁用滚动', 'error');
                    });

                    event = event || window.event;
                    if (event.preventDefault) {
                        // Firefox
                        event.preventDefault();
                        event.stopPropagation();
                    } else {
                        // IE
                        event.cancelBubble = true;
                        event.returnValue = false;
                    }
                    return false;
                }
            }, {passive: false});
            //resize事件触发图片和浏览器对齐
            $(window).resize(function () {
                imageTop(img_id, 0);
            })
            window.addEventListener('mousewheel', function () {
                middle = 1;
                setTimeout(function () {
                    for (var i = 0; i < 2; i++) {
                        if ((img_id == g_max_pic_count + 1 && pageYOffset < $("#img_" + g_max_pic_count).offset().top + $("#img_" + g_max_pic_count).height()) ||
                            ($("#img_" + img_id).length > 0 && pageYOffset < $("#img_" + img_id).offset().top))
                            img_id -= 1;
                        if ((img_id == g_max_pic_count && pageYOffset > $("#img_" + g_max_pic_count).offset().top + $("#img_" + g_max_pic_count).height()) ||
                            ($("#img_" + (img_id + 1)).length > 0 && pageYOffset > $("#img_" + (img_id + 1)).offset().top))
                            img_id += 1;
                        info_app.img_id = img_id;
                    }
                }, 100);
            })
            //添加右下角菜单
            let info = `
<div id="info" @mouseover="show=1" @mouseleave="show=0">
<transition name="custom-classes-transition" enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<template v-if="show"><div id="info_page" class="info_item" @click="switch_page" style="cursor:pointer;">{{message_page}}</div></template></transition>
<transition name="custom-classes-transition" enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<template v-if="show"><div id="info_skip" class="info_item" @click="switch_auto_skip" style="cursor:pointer;">{{message_auto_skip}}</div></template></transition>
<template v-if="show"><div id="info_skip" class="info_item" @click="switch_skip" style="cursor:pointer;">{{message_skip}}</div></template></transition>
<transition name="custom-classes-transition" enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<template v-if="show"><div id="info_switch" class="info_item" @click="switch_night" style="cursor:pointer;">{{message_switch}}</div></template></transition>
<template><div id="info_count" class="info_item"><span v-bind:class="{hide: collection_emoji_div_hide, collection_status_emoji: collection_status_emoji, goodman:(flash_good_css && collection_status)}">{{collection_status_emoji}}</span>{{message_count}}</div>
<div class="info_item time_class" v-bind:class="{hide: time_div_hide, goodman:flash_good_css}">{{time_str}}</div></template>
</div>`;
            let $info = $(info);
            $("body").append($info);
            let info_style = `
#info {
bottom: 2%;
right: 2%;
padding: 5px 5px;
background: rgba(48,48,48,.7) !important;
position: fixed;
color: rgba(255,255,255,.7);
border-radius: 3px;
}
.collection_status_emoji{
margin-right: 20px;
margin-left: -5px;
}
.time_class{
color: #06dfebd9;
}
.info_item{
padding:5px 0px;
width:120px;
}
.goodman{
-webkit-mask-image: linear-gradient(to right, red, orange, yellow, green, cyan, blue, purple);
background-image: linear-gradient(to right, red, orange, yellow, green, yellow, orange, red, orange, yellow, green, yellow, orange, red);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-background-size: 200% 100%;
animation: bgp 5s infinite linear;
}
.hide {
display: none;
}
@-webkit-keyframes bgp {
0%  { background-position: 0 0;}
100% { background-position: -100% 0;}
}`;
            GM_addStyle(info_style);
            //vue绑定右下角菜单
            info_app = new Vue({
                el: '#info',
                data: {
                    dark: dark_mode,
                    page: page_double,
                    show: 0,
                    img_id: img_id,
                    auto_skip: auto_skip,
                    skip: 0,
                    insert_image_id: '',
                    pic_count: 0,
                    prev_html_string_data: null,
                    collection_status: null,
                    time_str: "",
                    time_div_hide: true,
                    collection_emoji_div_hide: true,
                    flash_good_css: false,
                    http_token: null,
                },
                computed: {
                    message_switch: function () {
                        return this.dark ? '☀️日间模式' : '🌙夜间模式'
                    },
                    message_page: function () {
                        return this.page ? '1️⃣单页排布' : '2️⃣双页排布'
                    },
                    message_auto_skip: function () {
                        return this.auto_skip ? '☣️关闭自动跨页' : '☣️开启自动跨页';
                    },
                    message_skip: function () {
                        return '📖更改跨页'
                    },
                    message_count: function () {
                        return this.img_id + '/' + this.pic_count
                    },
                    collection_status_emoji: function () {
                        if (this.collection_status === null) {
                            return '';
                        }
                        return this.collection_status ? "🌟" : "☆"
                    },
                },
                methods: {
                    switch_night: function () {
                        this.dark = !this.dark
                        $.cookie('dark_mode', this.dark, {expires: 999999, path: '/'});
                        if (this.dark) {
                            $('html').addClass('dark_mode');
                        } else {
                            $('html').removeClass('dark_mode');
                        }
                    },
                    switch_auto_skip: function () {
                        if (this.auto_skip) {
                            msgTips('关闭☣️自动更改跨页', 'success');
                        } else {
                            msgTips('开启☣️自动更改跨页', 'success');
                        }
                        this.auto_skip = !this.auto_skip;
                        $.cookie('auto_skip', this.auto_skip, {expires: 999999, path: '/'});
                    },
                    switch_skip: function () {
                        skip();
                        msgTips('📖更改跨页', 'success');
                    },
                    switch_hide_time: function () {
                        this.time_div_hide = !this.time_div_hide;
                        $.cookie('right_bottom_time_switch', this.time_div_hide, {expires: 999999, path: '/'});
                    },
                    switch_flash_good_css: function () {
                        this.flash_good_css = !this.flash_good_css;
                        $.cookie('flash_good_css', this.flash_good_css, {expires: 999999, path: '/'});
                    },
                    switch_page: function () {
                        this.page = !this.page
                        $.cookie('page_double', this.page, {expires: 999999, path: '/'});
                        if (this.page) {
                            $('html').addClass('page_double');
                        } else {
                            $('html').removeClass('page_double');
                        }
                        $("html").animate({scrollTop: $("#img_" + img_id).offset().top}, 0);
                    },
                    request: function (opt) {
                        var url = opt.url;
                        var type = opt.type;
                        var data = opt.data;
                        var success = opt.success;
                        var error = opt.error;
                        var headers = opt.headers;
                        var request = new XMLHttpRequest();
                        request.open(type, url, true);
                        var headerName = [];
                        var headerText = [];

                        for (var i in headers) {
                            headerName.push(i);
                            headerText.push(headers[i]);
                        }

                        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

                        request.withCredentials = true; //加入这个携带cookie

                        for (var _i = 0; _i < headerText.length; _i++) {
                            request.setRequestHeader(headerName[_i], headerText[_i]);
                        }

                        var fromStr = '';

                        for (var _i2 in data) {
                            fromStr += _i2 + '=' + data[_i2] + "&";
                        }

                        fromStr = fromStr.substr(0, fromStr.length - 1);

                        if (type === 'POST') {
                            if (data) {
                                request.send(fromStr);
                            } else {
                                request.send(null);
                            }
                        } else if (type === 'GET') {
                            request.send(null);
                        }

                        request.onreadystatechange = function (ev) {
                            if (request.readyState == 4) {
                                if (request.status == 200) {
                                    var res = JSON.parse(request.response);
                                    success(res);
                                } else {
                                    var json = JSON.parse(request.response);
                                    error(json);
                                    msgTips(json.message, "error");
                                }
                            }
                        };
                    },
                    getPrev: function (func) {
                        if (info_app.prev_html_string_data === null) {
                            var href_url = $('.comicContent-prev.list a[href]').attr('href');
                            if (href_url !== undefined && href_url !== '') {
                                $.get(href_url, function (res) {
                                    info_app.prev_html_string_data = res;
                                    func(info_app.prev_html_string_data);
                                })
                                return;
                            }
                            msgTips('当前漫画目录页面地址解析失败', 'error');
                            return;
                        }
                        func(info_app.prev_html_string_data);
                    },
                    collect: function () {
                        this.getPrev(function (prev_string_data) {
                            if (info_app.collection_status === null) {
                                info_app.collection_status = (/加入書架/.exec(prev_string_data) === null);
                            }
                            var checkResult = !(info_app.collection_status);
                            var execResult = /collect\(\'([\S]+)\'\)/.exec(prev_string_data);
                            if (execResult !== null && execResult.length > 1) {
                                var cartoonId = execResult[1];
                                var token = info_app.getToken();
                                var wantToCollect = checkResult ? "1" : "0";

                                if (token) {
                                    info_app.request({
                                        type: "POST",
                                        url: API_URL + "/api/v2/web/collect",
                                        headers: {
                                            "Authorization": "Token " + token + ""
                                        },
                                        data: {
                                            comic_id: cartoonId,
                                            is_collect: wantToCollect
                                        },
                                        success: function success(res) {
                                            if (checkResult) {
                                                info_app.collection_status = true;
                                                msgTips('加入书架成功', 'success');
                                            } else {
                                                info_app.collection_status = false;
                                                msgTips('取消收藏成功', 'success');
                                            }
                                        },
                                        error: function error(res) {
                                        }
                                    });
                                } else {
                                    info_app.collection_emoji_div_hide = true;
                                    // msgTips('请在登录(不可用)之后进行操作', 'error');
                                }
                            } else {
                                msgTips('提取漫画ID失败', 'error');
                            }
                        });
                    },
                    getToken: function () {
                        if (this.http_token === null) {
                            var strCookie = document.cookie; //将多cookie切割为多个名/值对

                            var arrCookie = strCookie.split("; ");

                            for (var i = 0; i < arrCookie.length; i++) {
                                var arr = arrCookie[i].split("=");

                                if ("token" == arr[0]) {
                                    this.http_token = arr[1];
                                    return this.http_token;
                                }
                            }
                            this.http_token = false;
                        }

                        return this.http_token;
                    },

                },
                mounted () {
                    setTimeout(function () {
                        getImgId();

                        if (info_app.getToken()) {
                            info_app.collection_emoji_div_hide = false;
                        }

                        var right_bottom_time_switch = $.cookie('right_bottom_time_switch');
                        var flash_good_css = $.cookie('flash_good_css');
                        if (right_bottom_time_switch !== undefined) {
                            info_app.time_div_hide = right_bottom_time_switch === 'true';
                        }
                        if (flash_good_css !== undefined) {
                            info_app.flash_good_css = flash_good_css === 'true';
                        }

                        info_app.getPrev(function (prev_string_data) {
                            info_app.collection_status = (/加入書架/.exec(prev_string_data) === null);
                            msgTips('获取到当前漫画的收藏状态', 'success');
                        });
                    }, 1000);
                    setInterval(function () {
                        var now = new Date();
                        var hh = now.getHours();
                        var mm = now.getMinutes();
                        var ss = now.getSeconds();
                        info_app.time_str = (hh<10?"0"+hh:hh)+ " : "+ (mm<10?"0"+mm:mm)+ " : "+ (ss<10?"0"+ ss: ss);
                    }, 1000);
                },
            })
            //添加侧边目录栏
            let sidebar = `
<div id="sidebar" @mouseleave="drawer=false">
<div id="toggle" @mouseover="drawer=true" style="top:0px;left:0px;height:100vh;width:20vw;position: fixed;"></div>
<el-drawer
title="我是标题"
:size="size"
:modal="modal"
:visible="drawer"
:with-header="false"
:direction="direction"
@open="handleOpen">
<el-menu background-color="transparent"
text-color="#fff"
active-text-color="#ffd04b"
@select="handleSelect">
<template v-for="(item, index) in items">
<el-menu-item v-bind:index="index">{{item.title}}</el-menu-item>
</template>
</el-menu>
</el-drawer>
</div>`
            let $sidebar = $(sidebar);
            $("body").append($sidebar);
            //vue绑定侧边目录栏
            var sidebar_app = new Vue({
                el: '#sidebar',
                data: {
                    drawer: false,
                    size: '100%',
                    modal: false,
                    direction: 'ltr',
                    items: [],
                },
                methods: {
                    handleSelect(key) {
                        location.href = this.items[key].href;
                    },
                    handleOpen() {
                        setTimeout(function () {
                            if ($('.el-menu>li:nth-child(' + (ch_id - 1) + ')').offset()) {
                                $('.el-drawer__body').animate({scrollTop: 0}, 0);
                                $('.el-drawer__body').animate({scrollTop: $('.el-menu>li:nth-child(' + (ch_id - 1) + ')').offset().top - $('.el-drawer__body').offset().top}, 0);
                            }
                        }, 0)
                    },
                }
            })

            //加载目录
            function menu() {
                let $border = $('#default全部 ul:first-child a', el.contents());
                if ($border.length == 0) {
                    setTimeout(menu, 100);
                    return;
                }
                $.each($border, function (index) {
                    if (location.href.indexOf(this.href) >= 0) {
                        ch_id = index;
                        GM_addStyle('.el-menu>li:nth-child(' + (ch_id + 1) + '){background:rgba(255,165,0,.5) !important}')
                    }
                    sidebar_app.items.push({
                        title: this.text,
                        href: this.href,
                    })
                })
            }

            menu();
        })
    }
})();

QingJ © 2025

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