客户端开发(Electron)主题切换

简介: 客户端开发(Electron)主题切换

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



前情概要:

上一篇通过快速入门我们搭建了最基础的HelloWorld模型,我们接下来就要在这个最基础的项目中来做后续的基础性功能实战。


本篇说明:


主题切换在安卓、IOS、PC网站的应用的特别的广泛,在第一次接触flutter的时候第一次做状态切换的案例同样也是主题切换,巧了,学习electron的第一个案例也是,具体用到了哪些知识呢?我们先演示后总结。


准备本篇的首页:


  1. 支持显示当前的主题来源:跟随系统/手动切换;
  2. 提供两个按钮来触发切换事件;
  3. 通过renderer脚本来进行渲染。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>黑暗主题</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
    <link rel="stylesheet" type="text/css" href="./styles.css">
</head>
<body>
    <h1>黑暗主题</h1>
    <p>当前主题来源:<strong id="theme-source">System</strong></p>
    <button id="toggle-dark-mode">开启黑暗主题模式</button>
    <button id="reset-to-system">重置为系统主题模式</button>
    <script src="renderer.js"></script>
</body>
</html>
复制代码
@media (prefers-color-scheme: dark) {
  body {
    background: #333;
    color: white;
  }
}
@media (prefers-color-scheme: light) {
  body {
    background: #ddd;
    color: black;
  }
}
复制代码


预加载注入函数脚本:


  • 在主窗口暴露名为darkMode对象并分配两个函数,分别将信息传到主进程中
复制代码

const { contextBridge, ipcRenderer } = require("electron");

contextBridge.exposeInMainWorld("darkMode", { toggle: () => ipcRenderer.invoke("dark-mode:toggle"), system: () => ipcRenderer.invoke("dark-mode:system"), });

复制代码


在renderer.js脚本实际操作DOM事件:


  • 通过监听按钮的事件来触发预加载脚本扩展的桥接函数
document
  .getElementById("toggle-dark-mode")
  .addEventListener("click", async () => {
    const isDarkMode = await window.darkMode.toggle();
    document.getElementById("theme-source").innerHTML = isDarkMode
      ? "Dark"
      : "Light";
  });
document
  .getElementById("reset-to-system")
  .addEventListener("click", async () => {
    await window.darkMode.system();
    document.getElementById("theme-source").innerHTML = "System";
  });
复制代码


窗口创建后在主进程监听渲染进程的执行:


  • 我们需要在出进程中监听对应的事件来最终切换主题的来源
// 主进程相应HTML上的点击事件
  ipcMain.handle("dark-mode:toggle", () => {
    if (nativeTheme.shouldUseDarkColors) {
      nativeTheme.themeSource = "light";
    } else {
      nativeTheme.themeSource = "dark";
    }
    return nativeTheme.shouldUseDarkColors;
  });
  ipcMain.handle("dark-mode:system", () => {
    nativeTheme.themeSource = "system";
  });
复制代码


总结:


本篇我们初步学到了一下4小点:

  1. 预脚本中如何注入桥接函数;
  2. 渲染进程发送事件;
  3. 主进行监听事件;
  4. 主题来源的切换。



相关文章
|
1月前
|
JavaScript 开发工具
Electron 开发过程中主进程的无法看到 console.log 输出怎么办
Electron 开发过程中主进程的无法看到 console.log 输出怎么办
|
2月前
|
前端开发
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端效率软件
|
4月前
|
移动开发 开发框架 JavaScript
Vue3 Vite electron 开发桌面程序
Vue3 Vite electron 开发桌面程序
295 0
|
10月前
|
前端开发 算法 JavaScript
从零开始开发图床工具:使用 Gitee 和 Electron 实现上传、管理和分享(下)
从零开始开发图床工具:使用 Gitee 和 Electron 实现上传、管理和分享(下)
148 0
|
10月前
|
存储 Web App开发 JavaScript
从零开始开发图床工具:使用 Gitee 和 Electron 实现上传、管理和分享(上)
从零开始开发图床工具:使用 Gitee 和 Electron 实现上传、管理和分享(上)
198 0
|
12月前
|
Web App开发 资源调度 前端开发
基于NeteaseCloudMusicApi和electron-vue开发网易云音乐--electron-vue初始化
基于NeteaseCloudMusicApi和electron-vue开发网易云音乐--electron-vue初始化
114 0
|
前端开发 JavaScript 开发者
前端桌面应用开发:Electron介绍与实践(3)
前端桌面应用开发:Electron介绍与实践(3)
107 0
|
前端开发
前端桌面应用开发:Electron介绍与实践(2)
前端桌面应用开发:Electron介绍与实践(2)
101 0
|
开发框架 前端开发 JavaScript
前端桌面应用开发:Electron介绍与实践(1)
前端桌面应用开发:Electron介绍与实践
252 0
|
前端开发 JavaScript API
React使用Electron开发桌面端
React是一个流行的JavaScript库,用于构建Web应用程序。结合Electron框架,可以轻松地将React应用程序打包为桌面应用程序。以下是使用React和Electron开发桌面应用程序的步骤:
React使用Electron开发桌面端