Electron自定义导航栏

默认情况下electron会有一个默认的原生导航栏。

但在具体的业务场景下,这个原生的导航栏显得就那么适用了。需要更进一步根据产品自定义导航栏。


一、去除原生导航栏

在主进程代码中配置frame: false  关闭原生导航栏

import {BrowserWindow} from 'electron'
mainWindow = new BrowserWindow({
        height: 690,
        useContentSize: true,
        width: 1100,
        minWidth: 1100,
        minHeight: 690,
        frame: false//关闭原生导航栏
    })

 

二、在业务代码中写出导航栏样式

<template>
    <section class="MainHeader">
        <div style="display: flex;">
            <router-link :to="'/timetables'" class="logo noDrag" v-stat="{action:'logo'}"/>
            <div class="userInfo noDrag" v-if="userInfo">
                <div class="name " @click="path" v-stat="{action:'userInfo'}">
                    <img src="~assets/images/user.png"/>
                    <span>{{userInfo?userInfo.name:''}}</span>
                </div>
                <span class="logout" @click="logOut">退出</span>
            </div>
        </div>
        <div class="systemBtn">
            <i class="mini noDrag" title="最小化" @click="setWin('min')"></i>
            <i title="最大化" class="max noDrag" @click="setWin('max')"></i>
            <i title="关闭" class="close noDrag" @click="setWin('close')"></i>
        </div>
    </section>
</template>

 

三、可拖拽区

自定义的导航栏鼠标点击是无法拖动的,需要在css中增加-webkit-app-region: drag; 让鼠标可以拖动,若可拖动的html结构中有点击事件,那么需要在点击元素的css中另加-webkit-app-region: no-drag; 让其可触发点击事件,若不加该css则点击事件无效。

.MainHeader {
        -webkit-app-region: drag;
        .noDrag{
            -webkit-app-region: no-drag;
        }

 

四、自定义最小化、最大化、关闭

当我们在运行客户端时,electron称其为渲染进程,electron客户端启动则称为主进程。

最小化、最大化和关闭方法我们需要在主进程调用,而当我们实际触发最小化等等事件时是在渲染进程中的。因此我们需要将渲染进程,也就是实际运行的页面中最小化等等相关事件触发传递给主进程,然后在主进程中做事件监听,当收到渲染进程传来的方法时,调用最小化、最大化、关闭等方法来达到与原生导航栏一直的效果。

HTML

 <i class="mini noDrag" title="最小化" @click="setWin('min')"></i>
 <i title="最大化" class="max noDrag" @click="setWin('max')"></i>
 <i title="关闭" class="close noDrag" @click="setWin('close')"></i>

JS:渲染进程(也就是当前页面)通过ipcRenderer.send 将方法字段名传递给主进程。

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

    export default {
        methods: {
            setWin(type){
                ipcRenderer.send(type);
            }
        }

JS:主进程中监听事件,执行相应的方法。

import {BrowserWindow, ipcMain} from 'electron'

mainWindow = new BrowserWindow({
        height: 690,
        useContentSize: true,
        width: 1100,
        minWidth: 1100,
        minHeight: 690,
        frame: false
    })

ipcMain.on('min', () => mainWindow.minimize());
ipcMain.on('max', () => {
    if (mainWindow.isMaximized()) {
        mainWindow.restore();
    } else {
        mainWindow.maximize()
    }

});
ipcMain.on('close', () => mainWindow.close());

关于更多electron导航栏更多自定义功能可了解  官方相关文档

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Electron 中,可以使用自定义 HTML/CSS/JavaScript 来创建应用程序的操作栏,并使用 Electron 的 API 来使其可拖拽。以下是一个简单的示例: 1. 创建一个 HTML 文件,用于定义操作栏的外观和布局。 ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Custom Toolbar</title> <style> /* 操作栏样式 */ .toolbar { background-color: #333; color: white; height: 30px; padding: 5px; -webkit-app-region: drag; } /* 操作栏中按钮的样式 */ .toolbar button { background-color: transparent; border: none; color: white; cursor: pointer; font-size: 16px; margin-right: 10px; outline: none; } </style> </head> <body> <div class="toolbar"> <button id="close">X</button> <button id="minimize">-</button> <button id="maximize">+</button> </div> </body> </html> ``` 2. 在 Electron 的主进程中创建窗口,并将该 HTML 文件加载到该窗口中。 ``` const { app, BrowserWindow } = require('electron') function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, frame: false, // 隐藏默认操作栏 webPreferences: { nodeIntegration: true } }) win.loadFile('toolbar.html') // 加载操作栏 HTML 文件 // 允许拖拽窗口 win.on('maximize', () => { win.webContents.send('maximized') }) win.on('unmaximize', () => { win.webContents.send('unmaximized') }) } app.whenReady().then(createWindow) ``` 3. 在 HTML 文件中添加 JavaScript 代码,以便在用户点击操作栏按钮时执行相应的窗口操作。 ``` const { ipcRenderer, remote } = require('electron') // 通过 IPC 通信接收窗口最大化/还原事件 ipcRenderer.on('maximized', () => { document.getElementById('maximize').innerHTML = '-' }) ipcRenderer.on('unmaximized', () => { document.getElementById('maximize').innerHTML = '+' }) // 获取当前窗口 const win = remote.getCurrentWindow() // 关闭窗口 document.getElementById('close').addEventListener('click', () => { win.close() }) // 最小化窗口 document.getElementById('minimize').addEventListener('click', () => { win.minimize() }) // 最大化/还原窗口 document.getElementById('maximize').addEventListener('click', () => { if (win.isMaximized()) { win.unmaximize() } else { win.maximize() } }) ``` 4. 使用 CSS 的 `drag` 属性,使操作栏可拖拽。 ``` .toolbar { -webkit-app-region: drag; } ``` 以上是一个简单的示例,您可以根据自己的需求进行扩展。注意,在使用自定义操作栏时,需要禁用 Electron 默认的操作栏(通过设置 `frame: false`)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值