gpt4 book ai didi

javascript - 如何创建具有多个部分的 Electron 应用程序

转载 作者:行者123 更新时间:2023-12-03 12:21:02 26 4
gpt4 key购买 nike

我正在尝试创建一个具有多个“页面”的 Electron 应用。

就我而言,我正在尝试制作一个带有不同部分的边栏的应用程序。单击某个部分后,主窗口的内容会更改以呈现该部分的适当内容。

我是 JS 的新手,如果这是一个愚蠢的问题,我很抱歉,但截至目前,每当我尝试转到应用程序的某个部分时,在所有内容再次加载之前,我都会出现一秒钟的白色闪光屏幕。

示例:https://i.imgur.com/qOyuYsz.gif

我知道这与 Electron 重新加载 Chrome 引擎有关,但我如何做到这一点,以便在单击某个部分时自动显示内容,而不会出现任何“闪烁”或奇怪的东西?

基本上:如何使用 Electron 构建包含大量组件的 GUI?

我的 index.html 代码是:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Rupture Tools</title>
<link rel="stylesheet" href="./photon/css/photon.min.css">
</head>
<body>
<div class="window">
<div class="window-content">
<div class="pane-group">
<div class="pane-sm sidebar">
<nav class="nav-group">
<h5 class="nav-group-title">1 Click Generator</h5>
<a class="nav-group-item active">
<span class="icon icon-home"></span>
Dashboard
</a>
<a href="accounts.html">
<span class="nav-group-item">
<span class="icon icon-user-add"></span>
Accounts
</span>
</a>
<span class="nav-group-item">
<span class="icon icon-cloud-thunder"></span>
Activity
</span>
<span class="nav-group-item">
<span class="icon icon-check"></span>
Check Scores
</span>
<span class="nav-group-item">
<span class="icon icon-cog"></span>
Settings
</span>
<span class="nav-group-item">
<span class="icon icon-help-circled"></span>
Help/FAQ
</span>
</nav>
</div>
<div class="pane">Home</div>
</div>
</div>
</div>
</body>
</html>

求助!我对此一无所知,到处寻找。我来自 Python,那里没有太多的前端开发或 GUI 设计。谢谢!

这里有“某种”解决方案,但它使用了一种叫做 Sass 的东西,据我所知,使用 React 或 Angular 之类的东西更好。我从未使用过其中任何一个。

最佳答案

Electron 应用与网络应用非常相似。如您所见,在 HTML 文档之间导航的传统方式不适用于应用程序。这就是为什么 Web 应用程序被开发为 single-page applications 的原因(SPA) 如今。它只是意味着在用户导航时使用 JavaScript 手动加载和替换页面的某些部分。有几种方法可以实现这一点,但这里有一个如何为您的代码完成的示例:

// Get all the navigation links to an array
const naviLinks = Array.from(document.getElementsByClassName("nav-group-item"));
const contentEl = document.getElementsByClassName("pane")[0];

naviLinks.forEach((linkEl) => {
// Listen click event for the navigation link
linkEl.addEventListener("click", e => {
// Prevent default behavior for the click-event
e.preventDefault();
// Get the path to page content file
const href = linkEl.getAttribute("href");
if (href) {
// Use node.js fs-module to read the file
const fs = require("fs");
fs.readFile(href, (err, data) => {
if (err) {
throw err;
}
// show the selected page
contentEl.innerHTML = "";
contentEl.insertAdjacentHTML("beforeend", data);
})
}
})
})

请注意,页面内容 HTML 文件(accounts.html 等)应该只包含“ Pane ”div 的内容。 .您还需要通过 nodeIntegration:true在创建您的 BrowserWindow 时-object 在主进程中,所以你可以使用 require加载 fs -模块:

new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
}

如果页面内容文件很大,导航可能看起来很慢,因为每次点击都会读取文件并呈现页面。对此有帮助的一项优化是在页面加载时就已经在屏幕外读取文件和创建页面元素,然后只需交换 click 上的元素。 -事件。或者,您可以将页面内容放在 <template> 中-元素并交换它们。如果您有兴趣,我会将这些留给您自己尝试。

有大量 JavaScript 框架可以帮助您创建 SPA。目前一些流行的是 React、Angular 和 Vue。 “如何构建包含大量组件的 GUI?” 是前端 JavaScript 框架可以回答的问题之一,但当然存在学习曲线。当您觉得需要开始将 GUI 拆分为可重用或分层组件时,研究这些 JavaScript 框架可能是个好主意。

关于javascript - 如何创建具有多个部分的 Electron 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com