自学内容网 自学内容网

electron常用方法

一,,electron设置去除顶部导航栏和menu

1,electron项目
在创建BrowserWindow实例的main.js页面添加frame:false属性

2,electron-vue项目
在src/main/index.js文件下找到创建窗口的方法(createWindow),在mainWindow中添加frame:false属性

添加前:frame:true

添加后,frame:false

  // 创建一个浏览器的窗口
  const mainWindow = new BrowserWindow({
    width: 900,
    height: 670,
    // 最小高度
    minHeight: 500,
    minWidth: 500,
    show: false,
    // 窗口大小是否可调整,false就是不可以调整
    // resizable: false,
    // 窗口初始化的位置x轴
    x: 100,
    // 窗口初始化位置y轴
    y: 100,
    // autoHideMenuBar: false,
    // 去除顶部标题以及菜单栏
    frame: false,
    // 隐藏标题,会导致窗口无法移动
    // titleBarStyle: 'hidden',
    ...(process.platform === 'linux' ? { icon } : {}),
    webPreferences: {
      preload: join(__dirname, '../preload/index.js'),
      sandbox: false
      // nodeIntegration: true, // 不加,渲染进程会报错
      // contextIsolation: false // 为了安全性
      // // enableRemoteModule: true // 不加,渲染进程会报错
    }
  })

二:electron-vue设置一进页面全屏显示

解决前:fullscreen: false,

解决后:fullscreen: true,

三,解决electron设置可以拖动区域,模拟原来的顶部导航栏拖拽操作

1,设置了titleBarStyle: 'hidden'的弊端(隐藏标题(这种情况会导致窗口无法移动))

状态:  无标题,有:关闭、缩小、放大

解决办法1:(添加样式来解决)

1. 在渲染进程的dom中,添加样式:-webkit-app-region: drag;(会导致事件无法生效)

-webkit-app-region: drag;

2.给不需要拖拽的元素,取消-webkit-app-region: no-drag;(为了解决,添加后,会导致点击等事件无法触发,不生效)(给不需要拖动的地方添加,加了之后这个区域就无法拖动了)

-webkit-app-region: no-drag;

渲染进程添加样式来解决 在App.vue 中

<!-- 第一步 -->
<template>
  <div class="app">
    <router-view></router-view>
  </div>
</template>

<style>
  .app {
    position: absolute;
    left: 0;
    bottom: 0;
    right: 0;
    top: 0;
    -webkit-app-region: drag;
  }
</style>
<!-- 第二步在不需要拖动的地方: -->
<template>
  <div class="Login">
xxxxxxx,这个区域内的内容是无法拖动的
</div>
</template>
<style>
  .Login{
    -webkit-app-region: no-drag;
  }
</style>

解决办法2(给主进程传参)

App.vue文件

<template>
  <div class="app" @mousedown="mousedown">
    <router-view></router-view>
  </div>
</template>
<script setup lang="ts">
import Versions from './components/Versions.vue'
import { ref } from 'vue'
let isKeyDown = ref(false)
let dinatesX = ref(0)
let dinatesY = ref(0)
const ipcHandle = () => window.electron.ipcRenderer.send('ping')
const mousedown = (e) => {
  isKeyDown.value = true
  // 获取鼠标移入到窗口时的x坐标
  dinatesX.value = e.x
   // 获取鼠标移入到窗口时的y坐标
  dinatesY.value = e.y

  document.onmousemove = (ev) => {
    console.log(ev,'ev')
    // ev就是获取鼠标移入到窗口时相对于屏幕的x坐标y坐标
    if (isKeyDown.value) {
      const x = ev.screenX - dinatesX.value
      const y = ev.screenY - dinatesY.value
      //给主进程传入坐标
      let data = {
        appX: x,
        appY: y
      }
      electron.ipcRenderer.invoke('custom-adsorption', data)
    }
  }
  document.onmouseup = (ev) => {
    isKeyDown.value = false
  }
}
</script>
<style>
html,
body,
#app {
  height: 100%;
  width: 100%;
  /* overflow: hidden; */
  margin: 0;
  padding: 0;
}
.app {
  /* position: absolute;
  left:0;
  bottom: 0;
  right: 0;
  top:0;
  -webkit-app-region: drag; */
  background-color: aqua;
  height: 100%;
  width: 100%;
}
</style>

主流程的index.js文件

  ipcMain.handle('custom-adsorption', (_, res) => {
    mainWindow.setPosition(res.appX, res.appY)
  })

四:electron窗口去除自带导航栏后自定义窗口最小化,窗口全屏,恢复窗口,关闭窗口按钮操作

1,App.vue

<template>
  <div>
    <el-button @click="emit">退出程序</el-button>
    <el-button @click="clone">关闭当前窗口</el-button>
    <el-button @click="min">最小化</el-button>
    <el-button @click="max">最大化</el-button>
  </div>
  <div class="app" @mousedown="mousedown">
    <router-view></router-view>
  </div>
</template>



const max = () =>{
electron.ipcRenderer.invoke('max')
}
const min = () =>{
  electron.ipcRenderer.invoke('min')
}
const clone = () =>{
  electron.ipcRenderer.invoke('clone')
}
const emit = () =>{
  electron.ipcRenderer.invoke('emit')
}

 主进程

  ipcMain.handle('clone', () => {
    //关闭当前窗口
    mainWindow.close()
  })
  ipcMain.handle('min', () => {
    //最小化
    mainWindow.minimize()
  })
  ipcMain.handle('max', () => {
    //最大化
    if (mainWindow.isMaximized()) {
      //判断窗口是否最大化
      mainWindow.restore() //将窗口恢复为之前的状态
    } else {
      mainWindow.maximize() //将窗口全屏
    }
  })
  ipcMain.handle('emit', () => {
    //退出程序
    app.quit()
  })


原文地址:https://blog.csdn.net/m0_61265297/article/details/144443257

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!