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

简介: 客户端开发(Electron)认识窗口2

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


如何创建一个非矩形的窗口:


调整主进程代码

  1. 调整窗口的宽高尺寸一致,是窗口变为正方形;
  2. 调整窗口为透明,效果如下图显示;
    1.png
  3. 保持frame属性为false,依然由我们自己来定义边框和标题栏;
  4. 通常这样的窗口不需要支持窗口大小的调整,我们将属性resizable设置为false;
  5. 接着我们将窗口最大化的属性也禁用一下。


  • 完整代码如下
const win = new BrowserWindow({
    width: 380,
    height: 380,
    transparent: true,
    frame: false,
    resizable: false,
    maximizable: false,
    show: false,
    webPreferences: {
      // Use pluginOptions.nodeIntegration, leave this alone
      // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
      // nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
      // contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
      nodeIntegration: true,
      contextIsolation: false,
      enableRemoteModule: true
    }
  })
复制代码


调整渲染进程代码:

  1. 调整根组件样式,使之成为圆形:
html,
body {
  margin: 0px;
  padding: 0px;
  pointer-events: none;
}
#app {
  box-sizing: border-box;
  width: 380px;
  height: 380px;
  border-radius: 190px;
  border: 1px solid green;
  background: #fff;
  overflow: hidden;
  pointer-events: auto;
  text-align: center;
}
复制代码
  • 现在的效果如下图,四个角的颜色是桌面的壁纸的颜色。
    2.png
  1. 此时我们只是看起来是个圆形,但是四个角的部分触发的事件还是在窗口中,我们要做点击穿透;
  • 使用API:win.setIgnoreMouseEvents来动态设置是否忽略鼠标事件;
window.addEventListener('mousemove', event => {
  const flag = event.target === document.documentElement
  if (flag) {
    win.setIgnoreMouseEvents(true, { forward: true })
  } else {
    win.setIgnoreMouseEvents(false)
  }
})
win.setIgnoreMouseEvents(true, { forward: true })
复制代码


窗口的其他控制:


  1. 重写窗口关闭的处理(确认后再关闭):
window.onbeforeunload = function () {
  const { dialog } = remote
  dialog.showMessageBox(win, {
    type: 'warning',
    title: '离开此网站?',
    message: '系统可能不会保存您所做的更改。',
    buttons: ['离开', '取消']
  })
    .then((res) => {
    if (res.response === 0) {
      win.destroy()
    }
  })
  return false
}
复制代码
  1. 3.png
  2. 开启一个模态窗口,我们只有在关闭新打开的模块窗口后才能在原窗口继续操作,和模态Dialog一样;
this.win = new remote.BrowserWindow({
  parent: remote.getCurrentWindow(),
  modal: true,
  webPreferences: {
    nodeIntegration: true
  }
})
复制代码
  1. 4.png


总结:


     关于Electron的窗口就先介绍这么多,下一篇将开启界面相关内容的学习。



相关文章
electron解决创建新窗口html文件不能引入ipcRenderer通信
electron解决创建新窗口html文件不能引入ipcRenderer通信
|
30天前
|
人工智能 移动开发 JavaScript
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
142 18
|
Windows
Electron窗口白屏解决
Electron白屏问题主要出现在两方面: 1、electron未加载完毕html,electron自身产生的白色背景; 2、electron加载html,html处于加载渲染过程中产生的短暂白屏;
2141 0
|
3月前
|
JSON JavaScript 前端开发
开发桌面程序-Electron入门
【10月更文挑战第16天】Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架,嵌入了 Chromium 和 Node.js。本文介绍了如何搭建 Electron 开发环境,包括安装 Node.js、创建项目、配置 main.js 和打包应用。通过简单的步骤,你可以快速创建并运行一个基本的 Electron 应用程序。
108 4
开发桌面程序-Electron入门
|
4月前
|
前端开发 JavaScript API
electron多标签页模式更像客户端
electron多标签页模式更像客户端
332 7
electron多标签页模式更像客户端
|
6月前
|
安全 前端开发 Android开发
我的 Electron 客户端被第三方页面入侵了
公司有个内部项目是用 Electron 来开发的,有个功能需要像浏览器一样加载第三方站点。 本来一切安好,但是某天打开某个站点的链接,导致 整个客户端直接变成了该站点的页面。 这一看就是该站点做了特殊的处理,经排查网页源码后,果然发现了有这么一句代码。
|
6月前
|
JavaScript 开发工具
Electron 开发过程中主进程的无法看到 console.log 输出怎么办
Electron 开发过程中主进程的无法看到 console.log 输出怎么办
|
7月前
|
前端开发
PC端01,桌面端,electron的开发,electron的开发的系列课程,软件开发必备流程,electron的讲解,electron的开发,vitepress博主的gitee链接,PC端效率软件
PC端01,桌面端,electron的开发,electron的开发的系列课程,软件开发必备流程,electron的讲解,electron的开发,vitepress博主的gitee链接,PC端效率软件
PC端01,桌面端,electron的开发,electron的开发的系列课程,软件开发必备流程,electron的讲解,electron的开发,vitepress博主的gitee链接,PC端效率软件
|
9月前
|
移动开发 开发框架 JavaScript
Vue3 Vite electron 开发桌面程序
Vue3 Vite electron 开发桌面程序
375 0
|
7月前
|
JavaScript 网络安全 iOS开发
如何用 Electron 打包chatgpt-plus.top并生成mac客户端
如何用 Electron 打包chatgpt-plus.top并生成mac客户端
80 0