『快速入门electron』之实现窗口拖拽

简介: ## 看完本文你可学会- 对于进程通信有基本的一个了解- 学会自定义的顶部栏如何实现拖拽功能

看完本文你可学会

  • 对于进程通信有基本的一个了解
  • 学会自定义的顶部栏如何实现拖拽功能

前情提要

对于一些进程通信的基本demo可以去看下我的这个文章:
手把手带你快速入门Electron

实现拖拽功能

首先我们当然要在配置中将他自带的顶部栏禁用掉

...
frame:false,
...

然后去到我们的index.html,去用div画个header

<div class="header"></div>

随便给个黑色就行

接着我们要监听三个事件:mousedown mouseup mousemove

来确定鼠标点击、鼠标移动以及鼠标松开时候的坐标。

这时候我们来设定一些变量

let isDown = false;  // 鼠标状态
let baseX = 0,baseY = 0; //监听坐标

接下来是mousedown事件:

header.addEventListener('mousedown',function(e){
  isDown = true 
  baseX = e.x
  baseY = e.y
})

1.gif

可以看到每次点击黑色的顶部栏都有坐标在右边打印出来

开启控制台快捷键 ctrl shift i

然后我们要做的就是在移动中获取窗口实时的位置,首先要来明白这一点

image.png

把屏幕当成坐标轴,我们最后需要的其实是(screenX - baseX) , (screenY - baseY)

所以我们这样写

 document.addEventListener('mousemove',function(e){
  if(isDown){
    const x = e.screenX - baseX
    const y = e.screenY - baseY

    ipcRenderer.send('move-application',{
      posX:x,
      posY:y
    })
  }
})

算出x,y的坐标并发送到主进程,不知道这个如何通信的也可以去看我之前快速入门那个文章。

下面在主进程中接收,并使用setPosition方法实时设置位置就行了。

ipcMain.on('move-application',(event,pos) => {
  mainWin && mainWin.setPosition(pos.posX,pos.posY)
})

我们打印一下pos 看看:

2.gif
可以看到我们控制台上疯狂滚动的坐标,证明我们的操作没有错误。

最后不要忘记鼠标抬起的时候将isDown设置回去。

document.addEventListener('mouseup',function(){
  isDown = false
})

至此,我们的拖拽就成功了,学会了吗?

Electron系列文

最后

我是 Ned 一个被疫情耽误了好几年的、即将大四了的大学生。

关注我,一起努力学习吧!

你可以在公众号:前端成长日记 里找到我~

相关文章
|
9月前
electron解决创建新窗口html文件不能引入ipcRenderer通信
electron解决创建新窗口html文件不能引入ipcRenderer通信
|
Windows
Electron窗口白屏解决
Electron白屏问题主要出现在两方面: 1、electron未加载完毕html,electron自身产生的白色背景; 2、electron加载html,html处于加载渲染过程中产生的短暂白屏;
1932 0
Electron + Vite + TS + Vue3打开新窗口实战
前言 我们在使用 Electron 编写桌面应用时,打开新窗口可以说是一个非常常见的场景了。很多刚接触 Electron 的小伙伴面对这样一个问题可能都会显得比较棘手,比如打开新窗口如何知道渲染哪一个页面?打开的新窗口如何与其它窗口产生联系,比如父子窗口?...等等一系列问题。 今天我们就将 Electron 打开新窗口的常见做法分享给大家,而且是基于最新的 TS 封装。
1596 0
Electron + Vite + TS + Vue3打开新窗口实战
|
1月前
electron-vue 窗体禁止拖拽
electron-vue 窗体禁止拖拽
25 0
|
UED
解决Electron窗口白屏问题的预创建方案
在使用Electron创建窗口时,有时会遇到窗口显示白屏的问题。这篇文章将介绍一种解决方案,即预创建窗口,并提供了针对窗口关闭和应用退出的管理方法,以确保 Electron 应用的顺畅运行和用户体验
588 0
|
11月前
|
前端开发 API
Electron 渲染进程之间互相通信 创建窗口时触发
Electron 渲染进程之间互相通信 创建窗口时触发
electron菜单或托盘点击如何打开新的窗口
electron菜单或托盘点击如何打开新的窗口
electron菜单或托盘点击如何打开新的窗口
|
API C#
electron实现类似QQ来新消息时的闪烁与任务栏窗口提醒
公司项目有一款带即时聊天、群组功能的APP,因为要给客服人员使用,需要开发PC版本。之前使用C#开发过一个PC版本,但是C#的UI这一块支持的不太好,而且升级比较麻烦,我就牵头基于Electron去实现了一个PC版本。
3086 0
electron-vue升级electron到最新的版本后启动不起来,窗口一闪而过。
electron-vue 升级electron到最新的版本后启动不起来,窗口一闪而过。 排查后原因: electron-vue中的集成了很多库 单方面升级了 electron版本,导致了其他库的版本的不匹配 解决: 升级配套库的版本
302 0
|
JavaScript 前端开发
手把手带你快速入门Electron
## 看完本文你可学会📢 - 对于electron有一些基本认识 - 能够了解到electron的各个模块的基本作用 - 了解进程通信,如何进行互相通信 - 逐渐学会整活(~~这个才是目的~~)