Dear,大家好,我是“前端小鑫同学”,????长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


     Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。

背景说明:

     窗口指的就是我们在电脑端经常使用的软件时候显示Logo,标题和操作最小化,最大化,关闭按钮的标题栏及标题栏下面显示内容的整个窗口,这往往在Web前端中接触的不是那么多,但要开发一款体验不错的GUI应用将需要对窗口做不少的工作。

窗口(BrowserWindow)的常见属性:

  • 控制窗口标题栏、菜单栏

    title

    默认的窗口标题

    icon

    当' iconType '为' custom '时使用的图标

    frame

    指定为false将不提供默认窗口

    autoHideMenuBar

    自动隐藏菜单栏,默认不自动隐藏

    titleBarStyle

    窗口标题栏样式,'default'

  • 控制窗口位置:

    x

    窗口距离屏幕左侧的距离

    y

    窗口距离屏幕顶部的距离

    center

    窗口是否居中显示

    movable

    窗口是否可移动

  • 控制窗口尺寸:

    width

    窗口宽度(像素),默认800

    height

    窗口高度(像素),默认600

    minWidth

    窗口最小宽度

    minHeight

    窗口最小高度

    maxWidth

    窗口最大宽度

    maxHeight

    窗口最大高度

    resizable

    窗口是否支持缩放,默认支持

    minimizable

    窗口是否支持最小化,默认支持

    maximizable

    窗口是否支持最大化,默认支持

  • 渲染进程是否集成Node.js环境:

    nodeIntegration

    是否启动Node.js,默认不启用

    nodeIntegrationInWorker

    web worker中是否启动Node.js,默认不启用

    nodeIntegrationInSubFrames

    iframe是否支持Node.js,默认不启用

  • 扩展渲染进程能力:

    preload

    指定预加载的脚本文件

    webSecurity

    是否禁用同源策略,默认禁用

    contextIsolation

    是否启用单独的上下文环境运行

自定义窗口标题栏:

  • 下图是我们初始时候的标题栏和菜单栏两部分(记得当时刚学计算机课就是认识每一部分的名称????):

    客户端开发(Electron)认识窗口_node.js

  • 我要自定义窗口的标题栏第一步那就是要隐藏掉默认的标题栏,在窗口对象上新增​​frame​​​属性且设置值为​​false​​,如下图:

    客户端开发(Electron)认识窗口_标题栏_02

  • 在​Vue​的​​App.vue​​​中通过​​html​​标签来绘制我们的标题栏,绘制后的结果如下图所示:

    客户端开发(Electron)认识窗口_Electron_03客户端开发(Electron)认识窗口_node.js_04

为标题栏的按钮增加事件:

  • 按钮事件和调用函数的定义均与Vue一致,我们需要考虑的是如何与Electron联通来调用对应的API:
  • 调整窗口对象中的如下所示属性,切记启用​remote

    客户端开发(Electron)认识窗口_前端_05

  • 在App.vue中导入​​electron​​对象:

    const { remote } = window.require('electron')
  • 对应的操作API调用:

    客户端开发(Electron)认识窗口_node.js_06

当窗口最大化后如何缩小:

  • 监听窗口的变化来动态切换​​isMaxSize​​​的值来动态渲染最大化后的按钮,主要通过窗口对象来监听​​maximize​​​,​​unmaximize​​来实现:
  • 客户端开发(Electron)认识窗口_前端_07
  • 我们知道通过快捷键​​ctrl+R​​可以实现刷新,但此时当我们刷新页面后会造成窗口注册的监听对象泄露,直观的表现就是放大后的窗口又不会缩小了,我们先通过监听按键来进行禁止刷新功能吧:

    客户端开发(Electron)认识窗口_node.js_08

窗口状态记录与恢复:

  • GUI应用的一个特点就是可以通过拖动来改变窗口的位置和大小,当我们持续拖拽的过程中会产生大量的事件且大部分的事件对我们来说是没有必要的,此时我们就用防抖动来处理一下:

    客户端开发(Electron)认识窗口_前端_09

  • 监听到窗口的拖动和缩放后,我们可以用来记录窗口信息:

    客户端开发(Electron)认识窗口_Electron_10

  • 恢复窗口信息的代码如下:

    客户端开发(Electron)认识窗口_标题栏_11

  • 当我们修改主进程的代码并服务自动重启后你会发现窗口会先回到居中的位置再移动到保存的窗口状态的位置,我们需要在主进程关闭展示窗口,并由我们在渲染进程中控制:

    客户端开发(Electron)认识窗口_前端_12客户端开发(Electron)认识窗口_前端_13

总结:

     本篇主要介绍了对于Electron开发GUI应用是对于窗口上的标题栏的自定义,简单的做了一些演示,后续还有一块就完成了整个窗口部分的内容,一起敲起来吧。


欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。