Electron 改变窗口大小 setSize失效

项目场景: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() 失效

每天记录一点,助力成长!

欢迎大家来浏览我的博客,如发现我有写错的地方,欢迎交流指正。

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hongc93

感谢鼓励 继续航行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值