第二个需求
该项目是 electron-vue 的应用。
1、实现效果
允许用户在会议中设置虚拟背景,可以提前在设置中选择或上传自己的图片作为虚拟背景图,也可以在会议中打开背景替换设置(另一个设置,包含图片仅有默认和已经上传的图,该设置界面不支持导入图片),选择要替换的图片。两个不同的设置界面,设置内容和可设置内容要同步一致。
2、要求
(1)在通用设置中,支持用户自主选择、添加、删除图片。
(2)在会议中的背景图设置,是一个独立的透明窗口,支持设置、关闭,固定在会议窗口底部,跟随会议窗口的大小变化。
(3)通用设置和会议中的设置,用户选择的设置图片以及可以上传的图片库要一致同步。
(4)允许会议中,在通用设置中重新选择、添加、删除,且要能生效,且会议中的设置同步该设置。
(5)该背景设置只属于该用户,切换用户登录就只有默认数据。覆盖安装时,如果不删除数据则保留之前设置。
3、遇到的问题
(1)在主进程new BrowserWindow({})
实例化一个窗口,配置窗口属性。需要创建一个透明窗口,设置 transparent: true
(使窗口透明, 默认值为 false
, 在Windows上,仅在无边框窗口下起作用。),但设置后并没有生效,依然有白色背景。
解决思路:仔细观察了窗口创建的效果,发现调用窗口显示后,窗口刚出现时是透明的,等页面加载好后就变成白色背景,每次都如此。这说明,设置 transparent: true
是生效的,但为什么又会变成白色背景呢?这可能是窗口加载 win.loadFile(filePath)
的页面导致的(页面都是默认白色背景),所以我尝试给 body
设置背景色,果然窗口背景色为我设置的背景色。
解决方法:该设置透明的属性设置好,要是出现类似上面情况的,可以考虑把窗口要加载的页面,它的body或者html或者根元素设置background为transparent。
(2)设置的默认图片,安装应用后,第一次打开窗口,图片不会显示。图片存放在了每个用户的应用程序数据目录中的某文件夹下。
该文件夹在初次安装的时候,是从其他地方移动过来的,创建窗口提前于文件夹准备好,所以没有拿到图片资源。
(3)两个设置(通用设置和会议中设置)的界面很像,但是却出于不同的窗口,两边要数据同步,需要考虑很多细节。功能刚开始开发的时候,时间很紧,需求又是一步步递增,所以后期优化了两个窗口的页面,抽离出一个公共组件,处理好两边窗口的通信。
(未完...)