点击按钮可以打开另一个界面
按钮及界面都需要样式
- 引入样式
安装bootstrap命令如下:
npm install bootstrap --save
- 点击按钮可以打开另一个界面
在根目录下创建一个名为renderer
的文件夹,并创建index.js
,其作用就是向主进程发出通信,具体代码如下:
点击查看代码
| const { ipcRenderer } = require('electron') |
| document.getElementById('add-music').addEventListener("click",()=>{ |
| ipcRenderer.send("add-music-window") |
| }) |
再创建一个名为index.html,示例代码如下:
点击查看代码
| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> |
| |
| <link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/> |
| |
| <title>本地音乐播放器</title> |
| </head> |
| <body> |
| <div class="container m-4"> |
| <h1>我的播放器</h1> |
| <button type="button" id="add-music" class="btn btn-primary btn-lg btn-block m-4">添加歌曲到曲库</button> |
| |
| </div> |
| <script src="./index.js"></script> |
| </body> |
| </html> |
再创建一个名为add.js,示例代码如下:
点击查看代码
| const { ipcRenderer } = require('electron') |
| document.getElementById('add-music').addEventListener("click",()=>{ |
| ipcRenderer.send("add-music-window") |
| }) |
再创建一个名为add.html,示例代码如下:
点击查看代码
| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="UTF-8"> |
| <title>添加音乐</title> |
| <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css"> |
| </head> |
| <body> |
| <div class="container mt-4"> |
| <h1>添加音乐到曲库</h1> |
| <div id="musicList" class="mb-2">您还未选择任何音乐文件</div> |
| <button type="button" id="select-music" class="btn btn-outline-primary btn-lg btn-block mt-4"> |
| 选择音乐 |
| </button> |
| <button type="button" id="add-music" class="btn btn-primary btn-lg btn-block mt-4"> |
| 导入音乐 |
| </button> |
| </div> |
| <script> |
| require('./add.js') |
| </script> |
| </body> |
| </html> |
接着再来修改main.js代码,使用ipcMain来接收渲染进程发起的点击事件,示例代码如下:
点击查看代码
| const { app, BrowserWindow,ipcMain } = require('electron') |
| const createWindow = () => { |
| const win = new BrowserWindow({ |
| width: 800, |
| height: 600, |
| webPreferences: { |
| nodeIntegration: true, |
| contextIsolation: false, |
| } |
| }) |
| win.loadFile('./renderer/index.html') |
| ipcMain.on("add-music-window",()=>{ |
| const childWin = new BrowserWindow({ |
| width: 500, |
| height: 300, |
| webPreferences: { |
| nodeIntegration: true, |
| contextIsolation: false, |
| }, |
| parent:win |
| }) |
| childWin.loadFile('./renderer/add.html') |
| }) |
| } |
| |
| |
| app.whenReady().then(() => { |
| createWindow() |
| |
| app.on('activate', () => { |
| if (BrowserWindow.getAllWindows().length === 0) createWindow() |
| }) |
| }) |
| |
| app.on('window-all-closed', () => { |
| if (process.platform !== 'darwin') app.quit() |
| }) |
效果npm start运行查看结果到此一个简单点击交互完成。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)