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 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 declare function initializeDragPlus(win: BrowserWindow): void;
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
- function initializeDragPlus(win) {
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "electron-drag-plus",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "简单高效的Electron窗口拖拽库,支持自定义拖拽区域和交互元素,适用于无边框窗口应用",
5
5
  "main": "dist/index.js",
6
6
  "browser": "dist/renderer.js",