electron无边框小窗口问题

首先我用的是electron+html直接写的,不是vue

1.如何设置小窗口开启时的相对位置,现在是一直默认在中间。

2.目前拖拽窗口使用的是-webkit-app-region:drag,带来的后果很多人都晓得,就是鼠标事件失效了。因为窗口很小,就是一个悬浮按钮所以也没法区分开拖拽区域和非拖拽区域,就是一个整体,这个问题改如何解决。

win.setPosition应该可以达到

好像不管用,

BrowserWindow里有个x和y可以控制

可以参考下:https://www.jianshu.com/p/96327b044e85


测试代码:

index.html

<!DOCTYPE html>
<html lang="en" style="height: 100%;">


<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拖拽</title>
</head>


<body style="margin: 0;height: 100%;"></body>
<script>
    const { ipcRenderer } = require('electron');
    document.addEventListener('mousedown', mouseDown);
    document.addEventListener('mouseup', mouseUp);
    document.addEventListener('mousemove', mouseMove);
    let isMouseDown = false;
    let downX = 0;
    let downY = 0;
    function mouseDown({ pageX, pageY }) {
        downX = pageX;
        downY = pageY;
        isMouseDown = true;
    }
    function mouseUp() {
        isMouseDown = false;
    }
    function mouseMove({ pageX, pageY }) {
        if (isMouseDown) {
            let x = pageX - downX;
            let y = pageY - downY;
            ipcRenderer.send('mousemove', { x, y })
        }
    }
</script>
</html>


main.js

const { app, BrowserWindow, ipcMain } = require('electron');
app.on('ready', createWindow);
let win;
function createWindow() {
    win = new BrowserWindow({
        x: 50,
        y: 50,
        height: 100,
        width: 100,
        frame: false,
        webPreferences: {
            nodeIntegration: true,
            nodeIntegrationInWorker: true
        }
    });
    win.loadFile('index.html');
}
ipcMain.on('mousemove', (event, pos) => {
    const [x, y] = win.getPosition();
    win.setPosition(x + pos.x, y + pos.y);
});