electron-drag-plus 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -3
- package/dist/index.d.ts +5 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -28,16 +28,19 @@ pnpm add electron-drag-plus
|
|
|
28
28
|
|
|
29
29
|
### 主进程 API
|
|
30
30
|
|
|
31
|
-
#### `initializeDragPlus(window)`
|
|
31
|
+
#### `initializeDragPlus(window, callbacks?)`
|
|
32
32
|
|
|
33
33
|
初始化窗口拖拽功能,为指定的 Electron 窗口启用拖拽支持。
|
|
34
34
|
|
|
35
35
|
**参数:**
|
|
36
36
|
- `window: BrowserWindow` - Electron 窗口实例
|
|
37
|
+
- `callbacks?: DragCallbacks` - 可选的拖拽事件回调函数对象,包含:
|
|
38
|
+
- `onDragStart?: (window: BrowserWindow) => void` - 拖拽开始时的回调函数
|
|
39
|
+
- `onDragEnd?: (window: BrowserWindow) => void` - 拖拽结束时的回调函数
|
|
37
40
|
|
|
38
41
|
**返回值:** `void`
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
**使用示例 - 基本用法:**
|
|
41
44
|
```typescript
|
|
42
45
|
import { BrowserWindow } from 'electron';
|
|
43
46
|
import { initializeDragPlus } from 'electron-drag-plus';
|
|
@@ -58,6 +61,36 @@ const mainWindow = new BrowserWindow({
|
|
|
58
61
|
initializeDragPlus(mainWindow);
|
|
59
62
|
```
|
|
60
63
|
|
|
64
|
+
**使用示例 - 带回调函数:**
|
|
65
|
+
```typescript
|
|
66
|
+
import { BrowserWindow } from 'electron';
|
|
67
|
+
import { initializeDragPlus } from 'electron-drag-plus';
|
|
68
|
+
|
|
69
|
+
// 创建无边框窗口
|
|
70
|
+
const mainWindow = new BrowserWindow({
|
|
71
|
+
width: 800,
|
|
72
|
+
height: 600,
|
|
73
|
+
frame: false,
|
|
74
|
+
webPreferences: {
|
|
75
|
+
contextIsolation: true,
|
|
76
|
+
nodeIntegration: false,
|
|
77
|
+
preload: path.join(__dirname, 'preload.js')
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// 初始化拖拽功能并添加回调
|
|
82
|
+
initializeDragPlus(mainWindow, {
|
|
83
|
+
onDragStart: (window) => {
|
|
84
|
+
console.log('窗口开始拖拽');
|
|
85
|
+
// 可以在这里执行其他操作,如记录拖拽开始位置、修改UI状态等
|
|
86
|
+
},
|
|
87
|
+
onDragEnd: (window) => {
|
|
88
|
+
console.log('窗口拖拽结束');
|
|
89
|
+
// 可以在这里执行其他操作,如保存窗口位置、触发动画效果等
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
61
94
|
### 渲染进程 API
|
|
62
95
|
|
|
63
96
|
#### `enableWindowDrag(selector)`
|
|
@@ -125,7 +158,15 @@ function createWindow() {
|
|
|
125
158
|
});
|
|
126
159
|
|
|
127
160
|
// 初始化拖拽功能
|
|
128
|
-
initializeDragPlus(mainWindow
|
|
161
|
+
initializeDragPlus(mainWindow, {
|
|
162
|
+
onDragStart: (window) => {
|
|
163
|
+
console.log('窗口开始拖拽');
|
|
164
|
+
},
|
|
165
|
+
onDragEnd: (window) => {
|
|
166
|
+
console.log('窗口拖拽结束');
|
|
167
|
+
// 可以在这里保存窗口位置等操作
|
|
168
|
+
}
|
|
169
|
+
});
|
|
129
170
|
|
|
130
171
|
// 加载应用
|
|
131
172
|
mainWindow.loadFile('index.html');
|
|
@@ -346,6 +387,19 @@ ipcMain.on('window:close', () => {
|
|
|
346
387
|
- 始终检查元素是否存在,避免对不存在的元素调用方法
|
|
347
388
|
- 考虑使用 `try/catch` 块处理可能的异常
|
|
348
389
|
|
|
390
|
+
## 🔄 拖拽事件回调机制
|
|
391
|
+
|
|
392
|
+
从 v1.0.13 版本开始,库支持拖拽事件回调功能,允许开发者在拖拽过程中的关键节点执行自定义操作:
|
|
393
|
+
|
|
394
|
+
1. **拖拽开始回调** - 当用户开始拖拽窗口时触发
|
|
395
|
+
2. **拖拽结束回调** - 当用户结束拖拽窗口时触发
|
|
396
|
+
|
|
397
|
+
回调机制可以用于多种场景,如:
|
|
398
|
+
- 记录和保存窗口位置历史
|
|
399
|
+
- 在拖拽过程中显示特殊UI效果
|
|
400
|
+
- 实现拖拽状态的自定义动画
|
|
401
|
+
- 触发与窗口位置相关的业务逻辑
|
|
402
|
+
|
|
349
403
|
## 💡 窗口防抖机制说明
|
|
350
404
|
|
|
351
405
|
Electron Drag Plus 实现了智能的窗口防抖机制,彻底解决了在 Windows 平台上拖拽无边框窗口时出现的窗口大小抖动问题:
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { BrowserWindow } from 'electron';
|
|
2
|
-
export
|
|
2
|
+
export interface DragCallbacks {
|
|
3
|
+
onDragStart?: (window: BrowserWindow) => void;
|
|
4
|
+
onDragEnd?: (window: BrowserWindow) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function initializeDragPlus(win: BrowserWindow, callbacks?: DragCallbacks): void;
|
|
3
7
|
export default initializeDragPlus;
|
package/dist/index.js
CHANGED
|
@@ -4,14 +4,19 @@ exports.initializeDragPlus = initializeDragPlus;
|
|
|
4
4
|
const electron_1 = require("electron");
|
|
5
5
|
let currentWindow = null;
|
|
6
6
|
let dragData = null;
|
|
7
|
-
|
|
7
|
+
let currentCallbacks = null;
|
|
8
|
+
function initializeDragPlus(win, callbacks) {
|
|
8
9
|
if (!win) {
|
|
9
10
|
throw new Error('窗口实例不能为空');
|
|
10
11
|
}
|
|
12
|
+
if (callbacks) {
|
|
13
|
+
currentCallbacks = callbacks;
|
|
14
|
+
}
|
|
11
15
|
win.on('closed', () => {
|
|
12
16
|
if (currentWindow === win) {
|
|
13
17
|
currentWindow = null;
|
|
14
18
|
dragData = null;
|
|
19
|
+
currentCallbacks = null;
|
|
15
20
|
}
|
|
16
21
|
});
|
|
17
22
|
}
|
|
@@ -30,6 +35,16 @@ electron_1.ipcMain.on('electron-drag:start', (event, _) => {
|
|
|
30
35
|
originalSize: [winBounds.width, winBounds.height]
|
|
31
36
|
};
|
|
32
37
|
win.setResizable(false);
|
|
38
|
+
console.log('拖拽开始~');
|
|
39
|
+
if (currentCallbacks?.onDragStart) {
|
|
40
|
+
try {
|
|
41
|
+
console.log('拖拽开始回调~');
|
|
42
|
+
currentCallbacks.onDragStart(win);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('拖拽开始回调执行出错:', error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
33
48
|
});
|
|
34
49
|
electron_1.ipcMain.on('electron-drag:drag', (event, _) => {
|
|
35
50
|
if (!currentWindow || !dragData || !dragData.isDragging)
|
|
@@ -62,6 +77,7 @@ electron_1.ipcMain.on('electron-drag:stop', () => {
|
|
|
62
77
|
return;
|
|
63
78
|
}
|
|
64
79
|
const currentBounds = currentWindow.getBounds();
|
|
80
|
+
console.log('拖拽结束~');
|
|
65
81
|
try {
|
|
66
82
|
if (dragData.originalResizable !== undefined) {
|
|
67
83
|
currentWindow.setResizable(dragData.originalResizable);
|
|
@@ -82,6 +98,15 @@ electron_1.ipcMain.on('electron-drag:stop', () => {
|
|
|
82
98
|
}
|
|
83
99
|
}
|
|
84
100
|
}
|
|
101
|
+
if (currentCallbacks?.onDragEnd) {
|
|
102
|
+
try {
|
|
103
|
+
console.log('拖拽结束回调~');
|
|
104
|
+
currentCallbacks.onDragEnd(currentWindow);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('拖拽结束回调执行出错:', error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
85
110
|
dragData = null;
|
|
86
111
|
});
|
|
87
112
|
exports.default = initializeDragPlus;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|