Greasy Fork

来自缓存

Greasy Fork is available in English.

纯七AI助手

在页面上添加一个悬浮窗,用于访问 https://ai.xzbzq.com 搜题

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         纯七AI助手
// @namespace    http://xzbzq.com
// @version      1.5
// @description  在页面上添加一个悬浮窗,用于访问 https://ai.xzbzq.com 搜题
// @author       纯七
// @match        *://*/*
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @license MIT
// @homepage     https://xzbzq.com
// ==/UserScript==
(function() {
    'use strict';
    // 悬浮窗的HTML代码
    const iframeHtml = `
        <div id="floating-window">
            <div id="floating-header">
                <span>纯七AI助手</span>
                <button id="close-btn">×</button>
            </div>
            <iframe src="https://ai.xzbzq.com" frameborder="0"></iframe>
            <div id="resize-handle"></div>
        </div>
    `;
    // 将悬浮窗添加到页面
    const body = document.querySelector('body');
    body.insertAdjacentHTML('beforeend', iframeHtml);
    // 悬浮窗样式
    GM_addStyle(`
        #floating-window {
            position: fixed;
            bottom: 20px;
            right: 20px;
            width: 30%;
            height: 60%;
            background: rgba(255, 255, 255, 0.8);
            box-shadow: 0 4px 8px rgba(0,0,0,0.2);
            border-radius: 8px;
            overflow: hidden;
            display: flex;
            flex-direction: column;
            z-index: 9999;
            cursor: move;
        }
        #floating-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: rgba(255, 255, 255, 0.9);
            color: #333;
            padding: 10px;
            font-size: 18px;
            cursor: move;
        }
        #floating-header #close-btn {
            background: none;
            border: none;
            color: #333;
            font-size: 20px;
            cursor: pointer;
        }
        #floating-window iframe {
            flex-grow: 1;
            width: 100%;
            border: none;
        }
        #resize-handle {
            width: 20px;
            height: 20px;
            background: #333;
            opacity: 0.5;
            position: absolute;
            bottom: 0;
            right: 0;
            cursor: se-resize;
        }
        @media (max-width: 768px) {
            #floating-window {
                width: 80%;
                height: 50%;
                bottom: 10px;
                right: 10px;
            }
            #floating-header {
                font-size: 16px;
                padding: 8px;
            }
            #floating-header #close-btn {
                font-size: 18px;
            }
        }
        @media (max-width: 480px) {
            #floating-window {
                width: 90%;
                height: 40%;
                bottom: 5px;
                right: 5px;
            }
            #floating-header {
                font-size: 14px;
                padding: 6px;
            }
            #floating-header #close-btn {
                font-size: 16px;
            }
        }
    `);
    // 关闭按钮事件
    document.getElementById('close-btn').addEventListener('click', function() {
        document.getElementById('floating-window').style.display = 'none';
    });
    // 添加菜单命令以显示/隐藏悬浮窗
    let isWindowVisible = true;
    const toggleWindow = () => {
        const window = document.getElementById('floating-window');
        if (isWindowVisible) {
            window.style.display = 'none';
        } else {
            window.style.display = 'block';
        }
        isWindowVisible = !isWindowVisible;
    };
    GM_registerMenuCommand('切换 AI搜题悬浮窗', toggleWindow);
    // 拖拽功能
    const floatingWindow = document.getElementById('floating-window');
    const floatingHeader = document.getElementById('floating-header');
    let offsetX = 0, offsetY = 0, initialX = 0, initialY = 0;
    floatingHeader.addEventListener('mousedown', (e) => {
        offsetX = e.clientX;
        offsetY = e.clientY;
        document.addEventListener('mousemove', moveWindow);
        document.addEventListener('mouseup', stopMoveWindow);
    });
    const moveWindow = (e) => {
        e.preventDefault();
        initialX = offsetX - e.clientX;
        initialY = offsetY - e.clientY;
        offsetX = e.clientX;
        offsetY = e.clientY;
        const rect = floatingWindow.getBoundingClientRect();
        floatingWindow.style.top = (rect.top - initialY) + "px";
        floatingWindow.style.left = (rect.left - initialX) + "px";
    };
    const stopMoveWindow = () => {
        document.removeEventListener('mousemove', moveWindow);
        document.removeEventListener('mouseup', stopMoveWindow);
    };
    // 调整大小功能
    const resizeHandle = document.getElementById('resize-handle');
    let startX, startY, startWidth, startHeight;
    resizeHandle.addEventListener('mousedown', (e) => {
        startX = e.clientX;
        startY = e.clientY;
        const rect = floatingWindow.getBoundingClientRect();
        startWidth = rect.width;
        startHeight = rect.height;
        document.addEventListener('mousemove', resizeWindow);
        document.addEventListener('mouseup', stopResizeWindow);
    });
    const resizeWindow = (e) => {
        e.preventDefault();
        floatingWindow.style.width = (startWidth + e.clientX - startX) + 'px';
        floatingWindow.style.height = (startHeight + e.clientY - startY) + 'px';
    };
    const stopResizeWindow = () => {
        document.removeEventListener('mousemove', resizeWindow);
        document.removeEventListener('mouseup', stopResizeWindow);
    };
    // 添加透明度调整选项
    const setOpacity = (opacity) => {
        floatingWindow.style.background = `rgba(255, 255, 255, ${opacity})`;
    };
    GM_registerMenuCommand('设置透明度为100%', () => setOpacity(1));
    GM_registerMenuCommand('设置透明度为80%', () => setOpacity(0.8));
    GM_registerMenuCommand('设置透明度为60%', () => setOpacity(0.6));
    GM_registerMenuCommand('设置透明度为40%', () => setOpacity(0.4));
    GM_registerMenuCommand('设置透明度为20%', () => setOpacity(0.2));
})();