跳转到内容

User:BlackTea67/J-Tool

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

// 创建一个新的style元素来添加CSS
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = `
    #circle-button {
        position: fixed;
        top: 50%;
        right: 0;
        transform: translateY(-50%);
        width: 60px;
        height: 60px;
        border-radius: 50%;
        background-color: #fff;
        border: none;
        cursor: pointer;
        outline: none;
    }
    #circle-button img {
        width: 30px;
        height: 30px; /* 确保图标大小合适 */
    }
    .draggable-window {
    position: fixed; /* 使用fixed定位 */
    top: 50%;
    right: 80px; /* 初始位置在按钮右侧,根据按钮大小调整 */
    width: 300px;
    background-color: white;
    border: 1px solid #ccc;
    padding: 10px;
    display: none;
    z-index: 100;
   }
    .draggable-window .title-bar {
        cursor: move;
        margin: -10px;
        margin-bottom: 10px;
        background-color: #eee;
        padding: 5px;
        user-select: none;
    }
`;
document.head.appendChild(style);

// 创建按钮元素
var button = document.createElement('button');
button.id = 'circle-button';
button.innerHTML = '<img src="https://en.wikipedia.org/favicon.ico" alt="Wikipedia Icon">';

// 将按钮添加到body元素中
document.body.appendChild(button);

// 创建可拖动的窗口元素
var draggableWindow = document.createElement('div');
draggableWindow.id = 'draggable-window';
draggableWindow.className = 'draggable-window';
draggableWindow.innerHTML = '<div class="title-bar">J-Tool</div>我是一个窗口...';
draggableWindow.style.display = 'none'; // 确保窗口初始不显示

// 将可拖动的窗口添加到body元素中
document.body.appendChild(draggableWindow);

// 添加一个标志来记录窗口是否已经初始化过位置
var isWindowPositionInitialized = false;

// 为按钮添加点击事件,点击时切换窗口的显示状态
button.addEventListener('click', function() {
    // 检查窗口是否已经显示
    if (draggableWindow.style.display === 'none') {
        // 显示窗口
        draggableWindow.style.display = 'block';
        
        // 只有在窗口位置未初始化时,才计算并设置位置
        if (!isWindowPositionInitialized) {
            // 初始化窗口位置
            var buttonBounds = button.getBoundingClientRect();
            // 计算窗口的top值,使其出现在按钮的正上方并垂直居中对齐
            draggableWindow.style.top = (buttonBounds.bottom + window.pageYOffset - draggableWindow.offsetHeight / 2) + 'px';
            // 计算窗口的left值,使其出现在按钮的左侧
            draggableWindow.style.left = (buttonBounds.left + window.pageXOffset - draggableWindow.offsetWidth - 10) + 'px'; // 减去10px作为间隔
            // 更新标志,表示窗口位置已初始化
            isWindowPositionInitialized = true;
        }
    } else {
        // 如果窗口已显示,则隐藏窗口
        draggableWindow.style.display = 'none';
    }
});

// 变量来跟踪拖动状态
var isDragging = false;
var dragStartX, dragStartY, dragStartPosLeft, dragStartPosTop;

// 为标题栏添加拖动功能
var titleBar = draggableWindow.querySelector('.title-bar');
titleBar.addEventListener('mousedown', function(event) {
    if (event.target === titleBar) { // 检查是否是标题栏被按下
        isDragging = true;
        dragStartX = event.clientX;
        dragStartY = event.clientY;
        dragStartPosLeft = draggableWindow.offsetLeft;
        dragStartPosTop = draggableWindow.offsetTop;
        event.preventDefault(); // 阻止默认行为
    }
});

// 监听鼠标移动和释放事件来处理拖动
document.addEventListener('mousemove', function(event) {
    if (isDragging) {
        var dx = event.clientX - dragStartX;
        var dy = event.clientY - dragStartY;
        draggableWindow.style.left = dragStartPosLeft + dx + 'px';
        draggableWindow.style.top = dragStartPosTop + dy + 'px';
    }
});

document.addEventListener('mouseup', function() {
    isDragging = false;
});