Greasy Fork

来自缓存

Greasy Fork is available in English.

手机贴吧优化

针对浏览器直接访问贴吧的页面进行优化

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         手机贴吧优化
// @namespace    http://tampermonkey.net/
// @version      1.0.8
// @description  针对浏览器直接访问贴吧的页面进行优化
// @author       Container_Z
// @license MIT
// @match        https://tieba.baidu.com/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js
// ==/UserScript==

(function() {
    'use strict';

    ///////////////////////////////////////方法列表///////////////////////////////////////////////////
    function replace_broken_img(){//替换所有破损的表情连接
        var images = document.querySelectorAll('.emotion-img');
        // 遍历每个图片
        for (var i = 0; i < images.length; i++) {
            // 获取图片的src属性
            var src = images[i].getAttribute("src");
            // 如果图片指向https://static.tieba.baidu.com/
            if (src && src.startsWith("http://static.tieba.baidu.com/")) {
                // 替换为指向https://gsp0.baidu.com/5aAHeD3nKhI2p27j8IqW0jdnxx1xbK/
                var newSrc = src.replace("http://static.tieba.baidu.com/", "http://tb2.bdstatic.com/");//或者替换为https://gsp0.baidu.com/5aAHeD3nKhI2p27j8IqW0jdnxx1xbK/
                // 设置新的src属性
                images[i].setAttribute("src", newSrc);
                // 重新加载图片对应的资源
            }
        }
    }

    function add_a_herf_img(elem='.media-content img,.post-img-wrapper img'){//为所有贴吧图片添加一个a标签父级以便灯箱识别
        // 获取所有在用户文章内,是img并且已加载完成的dom
        var images = document.querySelectorAll(elem);
        // 遍历每个img元素
        images.forEach(function(image) {
            // 获取img元素的src属性值
                image.onload = function() {
                    if (image.parentElement && image.parentElement.tagName != "A") {
                    var src = image.getAttribute("data-src");
                    if(src){
                        // 获取img元素的父节点
                        var parent = image.parentElement;
                        // 创建一个a元素
                        var link = document.createElement("a");
                        // 设置a元素的data-fancybox属性为"gallery"
                        link.setAttribute("data-fancybox", "gallery");
                        // 设置a元素的href属性为img元素的src属性值
                        link.setAttribute("href", src);
                        // 使用父节点的replaceChild()方法,将img元素替换为a元素
                        parent.replaceChild(link, image);
                        // 使用a元素的append()方法,将img元素添加为a元素的子节点
                        link.append(image);
                    }
                };
            };
        });
    }

    function add_fancybox(){//为图片附加灯箱
        Fancybox.bind('[data-fancybox="gallery"]', {
            wheel: "slide", //滚轮
            contentClick: false, //单击鼠标
            contentDblClick: "toggleZoom", //双击鼠标
            idle: false,
            Thumbs: {
                type: "modern",
                showOnStart: false, //打开时不显示
            },
            backdropClick: false,
            compact: false,
            Carousel: { //缩放移动相关
                Navigation: false,
            },
            Images: {
                Panzoom: { //最大缩放倍率
                    maxScale: () => {
                        return 2.5;
                    },
                },
            },
            Toolbar: { //顶部工具栏
                display: {
                    left: ["infobar"], //顶部左侧
                    middle: [],
                    right: ["flipY", "flipX", "rotateCCW", "rotateCW","slideshow", "thumbs", "close"], //right: ["flipY", "flipX", "rotateCCW", "rotateCW", "zoomIn", "zoomOut", "slideshow", "fullscreen", "thumbs", "close"],
                },
            },
            //在文章输出时在preview内,就对移动、PC端做过判断,移动端则输出data-srcset=缩略图地址,并在灯箱渲染时作为srcset属性存在,此属性存在时,会覆盖原图的src属性,灯箱显示的图片会变成缩略图,此时通过保留和删除该属性,便可以实现缩略图与原图之间的切换
            on: {
                'Carousel.ready': (event) => { //初始化加载完成
                    event.container.style.setProperty( //背景显示放大模糊缩略图
                        '--bg-image',
                        `url("${event.getSlide().thumbSrc}")`
                    );
                },
                'Carousel.change': (event) => { //图片成功切换到下一张时执行(左右拖动图片松开鼠标的瞬间)
                    event.container.style.setProperty( //背景显示放大模糊缩略图
                        '--bg-image',
                        `url("${event.getSlide().thumbSrc}")`
                    );
                },

            },
        });
    }
    //////////////////////////////////方法执行////////////////////////////////////
    window.addEventListener("scroll", function(event) {
        replace_broken_img();
        add_a_herf_img();
    });

    // 文档内容发生变化时触发一次事件
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            replace_broken_img();
            add_a_herf_img();
        });
    });
    observer.observe(document, {childList: true, subtree: true});


    ////////////////////////载入fancybox文件,并在文件加载完成后执行灯箱初始化///////////////////////
    var link = document.createElement("link");
    link.setAttribute("rel", "stylesheet");
    link.setAttribute("href", "https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.css");
    document.head.appendChild(link);

    var script = document.createElement("script");
    script.setAttribute("src", "https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.umd.js");
    script.onload = function() {
        add_fancybox();
    };
    document.head.appendChild(script);

    ////////////////////////为文档附加样式///////////////////////
    var styleElement = document.createElement("style");
    styleElement.innerText = `

    a[data-fancybox] img {
	  cursor: zoom-in;/*画廊首页的图像缩略图,指针为放大镜*/
	}
	.fancybox__caption {
	  display:none;/*图片标题*/
	}

	.fancybox__container {
	  --fancybox-bg: #000;/*图片背景为全黑*/
	}
	/*背景附加上当前图片的模糊缩略图*/
	.fancybox__backdrop::after {
	    content: "";
	    position: absolute;
	    width: 100%;
	    height: 100%;
	    filter: blur(20px);
	    transform: scale(1.1);
	    opacity: 0.3;
	    background-image: var(--bg-image);
	    background-size: cover;
	    background-repeat: no-repeat;
	    background-position: center center;
	}

	/*为工具栏按钮修改颜色,图标粗细*/
	.fancybox__toolbar,
	.fancybox__nav {
	  --f-button-bg: transparent;
	  --f-button-hover-bg: rgb(90 90 90 / 70%);
	  --f-button-active-bg: rgb(90 90 90 / 40%);
	  --f-button-svg-stroke-width: 2.2;
	}

	/*修改工具栏被禁用的按钮颜色*/
	.f-button[disabled] svg{
	    --f-button-svg-disabled-opacity: .4;
	}
	/*修改灯箱内部,图片的距离屏幕边框的边距*/
	.fancybox__slide{
	    padding: 48px 8px 8px;
	}

	@media (min-width: 1024px){
	    .fancybox__slide {
	        padding: 64px 100px;
	    }
	}

	/*修复现代模式的缩略图中,点选缩略图后鼠标平移拖拽图片,白色描边的焦点还会停留在原本缩略图上的bug*/
	.is-modern .f-thumbs__slide:focus-within:not(.is-selected) {
	    filter: none;
	}

	/*屏幕宽度过小时隐藏部分工具栏按钮*/
	@media (max-width: 370px){
	    button.f-button[data-panzoom-action="flipX"],button.f-button[data-panzoom-action="flipY"]{
	        display: none;
	    }
	}
	@media (max-width: 280px){
	    button.f-button[data-panzoom-action="rotateCW"],button.f-button[data-panzoom-action="rotateCCW"]{
	        display: none;
	    }
	}
	@media (max-width: 190px){
	    button.f-button[data-panzoom-action="zoomIn"],button.f-button[data-panzoom-action="zoomOut"]{
	        display: none;
	    }
	}

	`;
    document.head.appendChild(styleElement);
})();