当前位置:网站首页>『快速入门electron』之实现窗口拖拽
『快速入门electron』之实现窗口拖拽
2022-08-04 11:12:00 【是乃德也是Ned】
看完本文你可学会
- 对于进程通信有基本的一个了解
- 学会自定义的顶部栏如何实现拖拽功能
前情提要
对于一些进程通信的基本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 看看:
可以看到我们控制台上疯狂滚动的坐标,证明我们的操作没有错误。
最后不要忘记鼠标抬起的时候将isDown
设置回去。
document.addEventListener('mouseup',function(){
isDown = false
})
至此,我们的拖拽就成功了,学会了吗?
Electron系列文
- 手把手带你快速入门Electron)
- 包包yyds:从 Electron 架构出发,深究 Electron 跨端原理 | 多图详解
- 小f的插件配上猪皮的文:vue + electron 开发一个实时监测github的跨端桌面应用
最后
我是 Ned
一个被疫情耽误了好几年的、即将大四了的大学生。
边栏推荐
- ORA-00054 资源正忙
- C#/VB.NET:在 Word 中设置文本对齐方式
- 关于架构的思考
- 美摄问答室|美映 VS 美摄云剪辑
- datax oracle to oracle incremental synchronization
- Advanced transcriptome analysis and R data visualization hot registration (2022.10)
- 怎么禁止textarea拉伸
- cubemx stm32 afm3000模块 气体流量传感器 驱动代码
- 浅析深度学习在图像处理中的应用趋势及常见技巧
- ECCV 2022 | 清华&腾讯AI Lab提出REALY: 重新思考3D人脸重建的评估方法
猜你喜欢
Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
Learn to use the basic interface of set and map
vscode插件设置——Golang开发环境配置
在 .NET MAUI 中如何更好地自定义控件
Xilinx VIVADO 中 DDR3(Naive)的使用(3)仿真测试
Leetcode刷题——路径总和
Digital management insight into retail and e-commerce operations - retail password
学会使用set和map的基本接口
【飞控开发高级教程7】疯壳·开源编队无人机-编队飞行
Maple 2022软件安装包下载及安装教程
随机推荐
【LeetCode】700.二叉搜索树
MySql数据库入门的基本操作
RL78 development environment
ORB-SLAM3中的优化
Digital management insight into retail and e-commerce operations - retail password
Business collocations
Mysql——》类型转换符binary
Maple 2022软件安装包下载及安装教程
Mysql高级篇学习总结14:子查询优化、排序优化、GROUP BY优化、分页查询优化
*iframe*
图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)
iMeta | German National Cancer Center Gu Zuguang published a complex heatmap visualization method
RL78开发环境
【飞控开发高级教程7】疯壳·开源编队无人机-编队飞行
面试蚂蚁(P7)竟被MySQL难倒,奋发图强后二次面试入职蚂蚁金服
Win11文件类型怎么改?Win11修改文件后缀的方法
单调栈一些题目练习
Maple 2022 software installation package download and installation tutorial
从零开始Blazor Server(7)--使用Furion权限验证
ORA-00054 资源正忙