我目前正在使用 ElectronJS 开发一个无框架应用程序,我试图让父窗口处理拖动、最小化、最大化和退出,以及一个用于子窗口的控制器来处理所有内容。但是,当我在 main.js 中将父窗口设置为主窗口时,当我移动父窗口时,内容窗口将保持不变。
以下是我的主要.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
}));
});
我的主窗口中的一个div.html-webkit-app-region: drag;
允许它像普通窗口一样充当顶部栏。基本上我希望它移动两个窗口。
就像@Dennis L所说的,使用文档中提供的move
事件。我虽然它只支持Mac,但我使用的是Windows。有一次我尝试过它的工作。
就我而言,我正在使用getPosition
方法来跟踪移动或拖动过程中mainWindow
位置。然后setPosition
secondWindow
的价值来自mainWindow
本身。
mainWindow.on('move', function() {
let position = mainWindow.getPosition();
secondWindow.setPosition(position[0], position[1]);
});
据我所知,您的目标基本上是,仅在具有父窗口和子窗口文档的macOS下支持的内容,我达到的孩子与父级一起移动的方式是,我侦听来自父项的移动事件并重新计算子项的位置。不是最好的方法,但它有效。
mainWindow.on("move", function () {"calculate and set new position here"}