electron实现桌面悬浮球效果

简介: electron实现桌面悬浮球效果

首先看下效果图如下:


image.png


image.png

当前效果是在mac电脑显示情况。

1、创建窗口的函数

import { app, protocol,BrowserWindow, ipcMain, Menu, Tray,screen } from 'electron'
// 创建窗口的函数
let win2 = null
async function createSBallWindow () {
  win2 = new BrowserWindow({
    width: 60, //悬浮窗口的宽度 比实际DIV的宽度要多2px 因为有1px的边框
    height: 60, //悬浮窗口的高度 比实际DIV的高度要多2px 因为有1px的边框
    type: 'toolbar',  //创建的窗口类型为工具栏窗口
    frame: false,  //要创建无边框窗口
    resizable: false, //禁止窗口大小缩放
    show: false,  //先不让窗口显示
    webPreferences: {
      devTools: false //关闭调试工具
    },
    transparent: true, //设置透明
    hasShadow:false, //不显示阴影
    alwaysOnTop: true, //窗口是否总是显示在其他窗口之前\
    // backgroundColor: '#eee',
    webPreferences: {
      // Use pluginOptions.nodeIntegration, leave this alone
      // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
      // preload: path.join(__dirname, 'preload.js'),
    }
  })
  //通过获取用户屏幕的宽高来设置悬浮球的初始位置
  const { left, top } = { left: screen.getPrimaryDisplay().workAreaSize.width - 160, top: screen.getPrimaryDisplay().workAreaSize.height - 160 }
  win2.setPosition(left, top) //设置悬浮球位置
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    await win2.loadURL(`${process.env.WEBPACK_DEV_SERVER_URL}#/ball`)
  }else{
    await win2.loadURL('app://./index.html#/ball')
  }
  win2.once('ready-to-show', () => {
    win2.show()
  })
  win2.on('close', () => {
    win2 = null
  })
}

2、调用窗口的函数

app.on('ready', async () => {
  //创建主窗口
  createWindow()
  //创建球形窗口
  createSBallWindow()
})

注意createSBallWindow创建窗口函数的show,设置的初始属性是show:false,也就是默认不显示,只有调用的时候才会显示。可以在主窗口关闭的时候调用win2.show()就可以让小球显示。

3、小球页面

在路由里添加个ball.vue的小球页面,访问地址是http:localhost:8081/#/ball代码。这里没有对拖拽事件做处理,不同系统上可能会有问题,具体怎么处理,可以自己百度。如下:

<template>
  <div class="ballBox" @click="openWin">工具</div>
</template>
<script setup>
const { ipcRenderer} = window.require('electron')
const openWin = () => {
  //渲染进程想主进程发送消息,点击打开主页面
  ipcRenderer.send('openWin', true)
}
</script>
<style lang="scss" scoped >
.ballBox {
    width: 60px;
    height: 60px;
    line-height: 60px;
    border-radius: 50%;
    box-sizing: border-box;
    background: #eee;
    border: 1px solid #eee;
    text-align: center;
    cursor: pointer;
    font-size: 14px;
}
</style>

在当前页面可以处理小球的其它功能,比如消息提示,右键操作功能。

4. 其它问题

1、细心的朋友可能注意到了,效果图的浮动小球样式有问题,上面有一个细线(mac系统上),这是苹果系统bug,暂时还没解决办法。


相关文章
|
2月前
|
人工智能 移动开发 JavaScript
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
220 18
|
4月前
|
JSON JavaScript 前端开发
开发桌面程序-Electron入门
【10月更文挑战第16天】Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架,嵌入了 Chromium 和 Node.js。本文介绍了如何搭建 Electron 开发环境,包括安装 Node.js、创建项目、配置 main.js 和打包应用。通过简单的步骤,你可以快速创建并运行一个基本的 Electron 应用程序。
139 4
开发桌面程序-Electron入门
|
9月前
|
资源调度 JavaScript 前端开发
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳定使用,我决定把官方新推出的 webim-vue3-demo,打包到桌面端,并记录了这次验证的过程以及所遇到的问题和解决方法。
135 2
|
8月前
|
前端开发
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端效率软件
|
10月前
|
移动开发 开发框架 JavaScript
Vue3 Vite electron 开发桌面程序
Vue3 Vite electron 开发桌面程序
390 0
|
10月前
|
开发框架 前端开发 Linux
前端知识笔记(二十四)———快速创建桌面端(electron-egg)
前端知识笔记(二十四)———快速创建桌面端(electron-egg)
459 0
|
10月前
|
前端开发 数据可视化 iOS开发
基于electron快速将任意网站打包成跨平台的桌面端软件
基于electron快速将任意网站打包成跨平台的桌面端软件
275 1
|
JavaScript 前端开发 Linux
Vue.js + Electron 的跨平台桌面应用程序开发
本文介绍了 Vue.js 和 Electron 的基本特点和原理,并分析了它们在桌面应用程序开发中的优势和应用场景。在基于 Vue.js 和 Electron 的桌面应用程序开发实践中,本文详细介绍了项目的搭建和配置,包括环境的准备、项目的初始化和依赖的安装等步骤。然后,本文介绍了使用 Vue.js 进行界面设计和组件开发的方法,并提供了相关的示例代码和实现细节。接下来,本文探讨了 Electron 主进程和渲染进程的开发,包括窗口管理、文件系统访问和与底层系统交互等方面的内容。最后,本文对基于 Vue.js 和 Electron 的桌面应用程序开发做出了总结,并展望了未来的发展方向和应用前景
905 2
|
缓存 监控 JavaScript
IM跨平台技术学习(九):全面解密新QQ桌面版的Electron内存优化实践
本文我们将和大家分享新版 QQ 在内存优化方面的探索和阶段性优化进展。虽然本文的讨论主要集中在 Windows 平台,但由于 Electron 的跨平台特性,大部分优化措施也同样适用于 macOS 和 Linux 平台。
265 0
|
前端开发 Linux iOS开发
IM跨平台技术学习(八):新QQ桌面版为何选择Electron作为跨端框架
在瞬息万变的互联网行业中,年过二十四的即时通讯IM应用 QQ 堪称超长寿的产品,见证了中国互联网崛起的完整历程。 然而,如今这个元老级产品经历了一次从内到外彻底的重构。在这次重构中,QQ 选择了 Electron 作为 UI 跨平台开发框架。 尽管 Electron 被 Slack、Visual Studio Code 和 Discord 等大型产品广泛使用,但也引发了一些网友的担忧,例如内存占用、安装包体积和启动速度等方面的问题。本文内容整理自 QQ 技术团队的采访,我们一起来看看QQ团队选择Electron作为桌面版跨端框架背后的决策与思考。
528 0