在无框电子窗口中使子窗口与父窗口一起移动

时间:2018-07-09 08:15:30

标签: javascript html css client electron

我目前正在使用ElectronJS开发无框架应用程序,在该应用程序中,我试图让父窗口处理拖动,最小化,最大化和退出操作,以及用于处理所有子窗口的子窗口控制器内容。但是,当我在main.js中将父级设置为主窗口时,移动父级时内容窗口会保留在原位。

下面是我的main.js:

const electron = require('electron');
const url = require('url');
const path = require('path');

const {app, BrowserWindow, Menu} = electron;

let mainWindow;
let contentWindow;

app.on('ready', function createWindow(){
    //Create window
    mainWindow = new BrowserWindow({
        width: 1280,
        height: 720,
        frame: false
    })
    contentWindow = new BrowserWindow({
        width: 1280,
        height: 720,
        frame: false,
        parent: mainWindow
    })

    //load html for window
    mainWindow.loadURL(url.format({
        pathname: path.join(__dirname, 'assets/html/mainWindow.html'),
        protocol:'file:',
        slashes: true
    }));

    contentWindow.loadURL(url.format({
        pathname: path.join(__dirname, 'assets/html/contentWindow.html'),
        protocol:'file:',
        slashes: true
    }));
});

mainWindow.html中的div之一具有-webkit-app-region: drag;,以使其像普通窗口一样充当顶部栏。基本上,我希望这两个窗口都移动。

2 个答案:

答案 0 :(得分:0)

据我所知,您的目标基本上是这样,只有具有父窗口和子窗口Doc的macOS才支持我达到孩子与父移动的方式,就是我听从父级移动事件并重新计算子级的位置。不是最好的方法,但是它可行。

mainWindow.on("move", function () {"calculate and set new position here"}

答案 1 :(得分:0)

就像@Dennis L所说的那样,使用docs中提供的move事件。我虽然只支持mac,但是我正在使用Windows。并且一旦我尝试了它。

在我的情况下,我使用getPosition方法在移动或拖动期间跟踪mainWindow的位置。然后setPosition中的secondWindow的价值就来自mainWindow本身。

  mainWindow.on('move', function() {
    let position = mainWindow.getPosition();
    secondWindow.setPosition(position[0], position[1]);
  });