Skip to content

Commit 0e3c89d

Browse files
阿岳阿岳
authored andcommitted
🚸 优化mac双指缩放和鼠标滚轮缩放画面的功能
1 parent 7a5b360 commit 0e3c89d

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

app/src/core/service/controlService/controller/concrete/ControllerCamera.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ export class ControllerCameraClass extends ControllerClass {
253253
return;
254254
}
255255
if (isMac) {
256+
if (Renderer.isShowDebug) {
257+
// 是debug模式,显示滚动时的缩放系数
258+
Stage.effectMachine.addEffect(TextRiseEffect.default(`event.deltaY: ${event.deltaY}`));
259+
}
256260
// 检测一下是否是双指缩放
257261
if (ControllerCameraMac.isTouchPadTwoFingerScale(event)) {
258262
// 双指缩放

app/src/core/service/controlService/controller/concrete/ControllerCamera/mac.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ export namespace ControllerCameraMac {
4848

4949
const FINGER_SCALE_MIN_DETECT_TIME = 2; // s
5050
// 上次检测时间
51-
let lastDetectTime = performance.now();
52-
// let currentWheelMode: "fingerScale" | "mouseWheel" = "fingerScale";
51+
let lastDetectTime = Date.now();
52+
let currentWheelMode: "fingerScale" | "mouseWheel" = "fingerScale";
5353
/**
5454
* 检测识别双指缩放
5555
* @param event
@@ -64,25 +64,28 @@ export namespace ControllerCameraMac {
6464
* 如果触发了一个事件移动不到1,那么后续连续触发的多个事件中都按双指缩放算
6565
*/
6666
const y = event.deltaY;
67-
if (y < 4) {
67+
if (Math.abs(y) < 4) {
6868
// 一定是双指缩放!
69-
// currentWheelMode = "fingerScale";
70-
lastDetectTime = performance.now();
69+
currentWheelMode = "fingerScale";
70+
lastDetectTime = Date.now();
7171
return true;
7272
} else {
7373
// 可能是滚轮,也可能是双指缩放的中间过程
74-
const currentTime = performance.now();
74+
const currentTime = Date.now();
7575
const diffTime = currentTime - lastDetectTime;
7676
if (diffTime > FINGER_SCALE_MIN_DETECT_TIME * 1000) {
7777
// 间隔过大,认为是滚轮
78-
// currentWheelMode = "mouseWheel";
78+
currentWheelMode = "mouseWheel";
7979
lastDetectTime = currentTime;
8080
return false;
8181
} else {
82-
// 间隔时间太短,认为是双指缩放的中间过程
83-
// currentWheelMode = "fingerScale";
8482
lastDetectTime = currentTime;
85-
return true;
83+
// 间隔时间太短,按照上一次的模式判断
84+
if (currentWheelMode === "fingerScale") {
85+
return true;
86+
} else {
87+
return false;
88+
}
8689
}
8790
}
8891
}
@@ -93,8 +96,8 @@ export namespace ControllerCameraMac {
9396
*/
9497
export function handleTwoFingerScale(event: WheelEvent) {
9598
console.log("handleTwoFingerScale");
96-
// 构建幂函数 y = 1.2 ^ x
97-
const power = 1.2;
99+
// 构建幂函数 y = a ^ x
100+
const power = 1.02; // 1.05 有点敏感,1.01 有点迟钝
98101
// y 是 camera 的currentScale
99102
// 通过y反解x
100103
const currnetCameraScale = Camera.currentScale;
@@ -104,7 +107,7 @@ export namespace ControllerCameraMac {
104107
const newX = x + diffX;
105108
// 求解新的 camera scale
106109
const newCameraScale = Math.pow(power, newX);
107-
Camera.currentScale = newCameraScale;
110+
// Camera.currentScale = newCameraScale;
108111
Camera.targetScale = newCameraScale;
109112
}
110113

0 commit comments

Comments
 (0)