项目场景:setSize失效
问题描述
直接 setSize()
会直接看到大小变化,放在普通场景算正常,但是如果类似从登录界面切换到主界面或者从主界面切换到登陆页面,这时候直接变化大小看起来很奇怪,最好需要做点处理过渡一下。
解决方案:
当然,登录窗口和主窗口你可以用两个
BrowserWindow
实例来实现,这里只说只用一个窗口的方式
1、初始化窗口的函数
function initLoginWindow(windowObj) => {
windowObj.setTitle('登录');
windowObj.setSize(400, 500);
windowObj.setMinimumSize(400, 500);
windowObj.setResizable(false);
windowObj.setMaximizable(false);
windowObj.center();
};
function initMainWindow(windowObj) => {
windowObj.setTitle('客户端');
windowObj.setSize(1100, 900);
windowObj.setMinimumSize(1100, 900);
windowObj.setResizable(true);
windowObj.setMaximizable(true);
windowObj.center();
};
2、新建监听,用于设置窗口信息,延迟展示窗口
function delayShowWindow(initFn, delay) {
mainWindow.setOpacity(0);
initFn(mainWindow);
// 在最小化之后修改size会无效,所以要在最小化之前修改大小
mainWindow.minimize();
setTimeout(() => {
mainWindow.setOpacity(1);
mainWindow.show();
mainWindow.focus();
}, delay);
}
ipcMain.on('showMainWindow', (event, delay=500) => {
if (delay) {
delayShowWindow(initMainWindow, delay);
} else {
initMainWindow(mainWindow);
}
});
ipcMain.on('showLoginWindow', (event, delay) => {
if (delay) {
delayShowWindow(initLoginWindow, delay);
} else {
initLoginWindow(mainWindow);
}
});
说明:
关键代码在 delayShowWindow
,先改成透明,然后设置大小、标题等等,然后执行最小化,最后延迟展示。
注意代码顺序也会影响执行结果
注意:
mainWindow.setOpacity(0)
如果改用mainWindow.hide()
,某些时候会导致setSize()
失效
每天记录一点,助力成长!
欢迎大家来浏览我的博客,如发现我有写错的地方,欢迎交流指正。
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!