Skip to content

Commit c8a8422

Browse files
committed
#147 移動処理の負担を軽減
1 parent fbbda51 commit c8a8422

10 files changed

+116
-28
lines changed

src/js/controller/application/SoundArea/usecase/SoundAreaLoopCountPointerDownEventUseCase.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,20 @@ describe("SoundAreaLoopCountPointerDownEventUseCase Test", () =>
3434
});
3535

3636
let stopPropagation = false;
37+
let preventDefault = false;
3738
const mockEvent = {
3839
"pointerId": 100,
3940
"button": 0,
4041
"stopPropagation": vi.fn(() => { stopPropagation = true; }),
42+
"preventDefault": vi.fn(() => { preventDefault = true; }),
4143
"currentTarget": input
4244
} as unknown as PointerEvent;
4345

4446
soundArea.targetIndex = -1
4547
expect(soundArea.targetIndex).toBe(-1);
4648
expect(pointerId).toBe(0);
4749
expect(stopPropagation).toBe(false);
50+
expect(preventDefault).toBe(false);
4851
expect(pointerMove).toBe(false);
4952
expect(pointerUp).toBe(false);
5053
expect(pointerCancel).toBe(false);
@@ -54,6 +57,7 @@ describe("SoundAreaLoopCountPointerDownEventUseCase Test", () =>
5457
expect(soundArea.targetIndex).toBe(0);
5558
expect(pointerId).toBe(100);
5659
expect(stopPropagation).toBe(true);
60+
expect(preventDefault).toBe(true);
5761
expect(pointerMove).toBe(true);
5862
expect(pointerUp).toBe(true);
5963
expect(pointerCancel).toBe(true);

src/js/controller/application/SoundArea/usecase/SoundAreaLoopCountPointerDownEventUseCase.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { execute as soundAreaLoopCountPointerMoveEventUseCase } from "./SoundAre
33
import { execute as soundAreaLoopCountPointerUpEventUseCase } from "./SoundAreaLoopCountPointerUpEventUseCase";
44
import { $useKeyboard } from "@/shortcut/ShortcutUtil";
55
import { soundArea } from "@/controller/domain/model/SoundArea";
6-
import { $activeTouchPointers } from "@/global/GlobalUtil";
6+
import { $activeTouchPointers, $setEditingElement } from "@/global/GlobalUtil";
7+
import { $allHideMenu } from "@/menu/application/MenuUtil";
78

89
/**
910
* @description ループ回数操作のwindowイベントを登録
@@ -33,6 +34,15 @@ export const execute = (event: PointerEvent): void =>
3334
return ;
3435
}
3536

37+
// メニューを全て非表示にする
38+
$allHideMenu();
39+
40+
// 編集中の要素を解除
41+
$setEditingElement(null);
42+
43+
// fixed logic
44+
event.preventDefault();
45+
3646
// 対象のインデックスを設定
3747
soundArea.targetIndex = parseInt(element.dataset.index as string);
3848

src/js/controller/application/SoundArea/usecase/SoundAreaLoopCountPointerMoveEventUseCase.ts

+18-6
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,41 @@ import {
33
$setCursor
44
} from "@/global/GlobalUtil";
55

6+
/**
7+
* @description タイマーID
8+
* Timer ID
9+
*
10+
* @member {number}
11+
* @default -1
12+
* @private
13+
*/
14+
let $timerId: number = -1;
15+
616
/**
717
* @description ループ回数操作を開始
818
* Start loop count operation
919
*
10-
* @param {PointerEvent} event
20+
* @param {PointerEvent} event
1121
* @return {void}
1222
* @method
1323
* @public
1424
*/
1525
export const execute = (event: PointerEvent): void =>
1626
{
27+
// イベントの伝播を止める
28+
event.stopPropagation();
29+
event.preventDefault();
30+
31+
// カーソルを変更
1732
$setCursor("ew-resize");
1833

1934
// マウスの移動量がない場合は処理を終了
2035
if (!event.movementX) {
2136
return ;
2237
}
2338

24-
// イベントの伝播を止める
25-
event.stopPropagation();
26-
event.preventDefault();
27-
28-
requestAnimationFrame((): void =>
39+
cancelAnimationFrame($timerId);
40+
$timerId = requestAnimationFrame((): void =>
2941
{
3042
const element = event.target as HTMLInputElement;
3143
if (!element) {

src/js/controller/application/SoundArea/usecase/SoundAreaVolumePointerDownEventUseCase.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,20 @@ describe("SoundAreaVolumePointerDownEventUseCase Test", () =>
3434
});
3535

3636
let stopPropagation = false;
37+
let preventDefault = false;
3738
const mockEvent = {
3839
"pointerId": 100,
3940
"button": 0,
4041
"stopPropagation": vi.fn(() => { stopPropagation = true; }),
42+
"preventDefault": vi.fn(() => { preventDefault = true; }),
4143
"currentTarget": input
4244
} as unknown as PointerEvent;
4345

4446
soundArea.targetIndex = -1
4547
expect(soundArea.targetIndex).toBe(-1);
4648
expect(pointerId).toBe(0);
4749
expect(stopPropagation).toBe(false);
50+
expect(preventDefault).toBe(false);
4851
expect(pointerMove).toBe(false);
4952
expect(pointerUp).toBe(false);
5053
expect(pointerCancel).toBe(false);
@@ -54,6 +57,7 @@ describe("SoundAreaVolumePointerDownEventUseCase Test", () =>
5457
expect(soundArea.targetIndex).toBe(0);
5558
expect(pointerId).toBe(100);
5659
expect(stopPropagation).toBe(true);
60+
expect(preventDefault).toBe(true);
5761
expect(pointerMove).toBe(true);
5862
expect(pointerUp).toBe(true);
5963
expect(pointerCancel).toBe(true);

src/js/controller/application/SoundArea/usecase/SoundAreaVolumePointerDownEventUseCase.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { execute as soundAreaVolumePointerMoveEventUseCase } from "./SoundAreaVo
33
import { execute as soundAreaVolumePointerUpEventUseCase } from "./SoundAreaVolumePointerUpEventUseCase";
44
import { $useKeyboard } from "@/shortcut/ShortcutUtil";
55
import { soundArea } from "@/controller/domain/model/SoundArea";
6-
import { $activeTouchPointers } from "@/global/GlobalUtil";
6+
import { $activeTouchPointers, $setEditingElement } from "@/global/GlobalUtil";
7+
import { $allHideMenu } from "@/menu/application/MenuUtil";
78

89
/**
910
* @description 音声操作のwindowイベントを登録
@@ -33,6 +34,15 @@ export const execute = (event: PointerEvent): void =>
3334
return ;
3435
}
3536

37+
// メニューを全て非表示にする
38+
$allHideMenu();
39+
40+
// 編集中の要素を解除
41+
$setEditingElement(null);
42+
43+
// fixed logic
44+
event.preventDefault();
45+
3646
// 対象のインデックスを設定
3747
soundArea.targetIndex = parseInt(element.dataset.index as string);
3848

src/js/controller/application/SoundArea/usecase/SoundAreaVolumePointerMoveEventUseCase.ts

+17-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ import {
55
$setCursor
66
} from "@/global/GlobalUtil";
77

8+
/**
9+
* @description タイマーID
10+
* Timer ID
11+
*
12+
* @member {number}
13+
* @default -1
14+
* @private
15+
*/
16+
let $timerId: number = -1;
17+
818
/**
919
* @description 音量操作を開始
1020
* Start volume operation
@@ -16,17 +26,19 @@ import {
1626
*/
1727
export const execute = (event: PointerEvent): void =>
1828
{
29+
// イベントの伝播を止める
30+
event.stopPropagation();
31+
event.preventDefault();
32+
33+
// カーソルを変更
1934
$setCursor("ew-resize");
2035

2136
if (!event.movementX) {
2237
return ;
2338
}
2439

25-
// イベントの伝播を止める
26-
event.stopPropagation();
27-
event.preventDefault();
28-
29-
requestAnimationFrame((): void =>
40+
cancelAnimationFrame($timerId);
41+
$timerId = requestAnimationFrame((): void =>
3042
{
3143
const element = event.target as HTMLInputElement;
3244
if (!element) {

src/js/controller/application/StageSetting/usecase/StageSettingFpsPointerMoveEventUseCase.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@ import { $STAGE_DEFAULT_FPS } from "@/config/StageSettingConfig";
22
import { $setCursor } from "@/global/GlobalUtil";
33
import { $getCurrentWorkSpace } from "@/core/application/CoreUtil";
44

5+
/**
6+
* @description タイマーID
7+
* Timer ID
8+
*
9+
* @member {number}
10+
* @default -1
11+
* @private
12+
*/
13+
let $timerId: number = -1;
14+
515
/**
616
* @description ステージのフレームレートの値操作のマウスムーブイベント
717
* Mouse move event for value operation of stage frame rate
@@ -24,7 +34,8 @@ export const execute = (event: PointerEvent): void =>
2434
return ;
2535
}
2636

27-
requestAnimationFrame((): void =>
37+
cancelAnimationFrame($timerId);
38+
$timerId = requestAnimationFrame((): void =>
2839
{
2940
const element = event.target as HTMLInputElement;
3041
if (!element) {

src/js/controller/application/StageSetting/usecase/StageSettingHeightPointerMoveEventUseCase.ts

+18-7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import { execute as stageStyleUpdateSizeService } from "@/core/application/Stage
66
import { execute as screenStageAreaUpdateSizeService } from "@/screen/application/ScreenStageArea/service/ScreenStageAreaUpdateSizeService";
77
import { execute as screenScrollResizeService } from "@/screen/application/ScreenScroll/service/ScreenScrollResizeService";
88

9+
/**
10+
* @description タイマーID
11+
* Timer ID
12+
*
13+
* @member {number}
14+
* @default -1
15+
* @private
16+
*/
17+
let $timerId: number = -1;
18+
919
/**
1020
* @description ステージ高さの値操作のマウスムーブイベント
1121
* Mouse move event for value operation of stage height
@@ -17,18 +27,19 @@ import { execute as screenScrollResizeService } from "@/screen/application/Scree
1727
*/
1828
export const execute = (event: PointerEvent): void =>
1929
{
20-
if (!event.movementX) {
21-
return ;
22-
}
30+
// イベントの伝播を止める
31+
event.stopPropagation();
32+
event.preventDefault();
2333

2434
// カーソルを変更
2535
$setCursor("ew-resize");
2636

27-
// イベントの伝播を止める
28-
event.stopPropagation();
29-
event.preventDefault();
37+
if (!event.movementX) {
38+
return ;
39+
}
3040

31-
requestAnimationFrame((): void =>
41+
cancelAnimationFrame($timerId);
42+
$timerId = requestAnimationFrame((): void =>
3243
{
3344
const element = event.target as HTMLInputElement;
3445
if (!element) {

src/js/controller/application/StageSetting/usecase/StageSettingWidthPointerDownEventUseCase.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ import { execute as timelineToolPlayStopUseCase } from "@/timeline/application/T
33
import { stageSetting } from "@/controller/domain/model/StageSetting";
44
import { $useKeyboard } from "@/shortcut/ShortcutUtil";
55
import { $STAGE_HEIGHT_ID } from "@/config/StageSettingConfig";
6-
import { $activeTouchPointers, $setEditingElement } from "@/global/GlobalUtil";
76
import { timelineHeader } from "@/timeline/domain/model/TimelineHeader";
7+
import { $allHideMenu } from "@/menu/application/MenuUtil";
8+
import {
9+
$activeTouchPointers,
10+
$setEditingElement
11+
} from "@/global/GlobalUtil";
812
import {
913
$setBeforeHeight,
1014
$setBeforeWidth
1115
} from "../StagsSettingUtil";
12-
import { $allHideMenu } from "@/menu/application/MenuUtil";
1316

1417
/**
1518
* @description ステージエリアの幅のマウスダウンイベントユースケース

src/js/controller/application/StageSetting/usecase/StageSettingWidthPointerMoveEventUseCase.ts

+16-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import { execute as stageStyleUpdateSizeService } from "@/core/application/Stage
66
import { execute as screenStageAreaUpdateSizeService } from "@/screen/application/ScreenStageArea/service/ScreenStageAreaUpdateSizeService";
77
import { execute as screenScrollResizeService } from "@/screen/application/ScreenScroll/service/ScreenScrollResizeService";
88

9+
/**
10+
* @description タイマーID
11+
* Timer ID
12+
*
13+
* @member {number}
14+
* @default -1
15+
* @private
16+
*/
17+
let $timerId: number = -1;
18+
919
/**
1020
* @description ステージ幅の値操作のマウスムーブイベント
1121
* Mouse move event for value operation of stage width
@@ -17,18 +27,19 @@ import { execute as screenScrollResizeService } from "@/screen/application/Scree
1727
*/
1828
export const execute = (event: PointerEvent): void =>
1929
{
20-
if (!event.movementX) {
21-
return ;
22-
}
23-
2430
// イベントの伝播を止める
2531
event.stopPropagation();
2632
event.preventDefault();
2733

2834
// カーソルを変更
2935
$setCursor("ew-resize");
3036

31-
requestAnimationFrame((): void =>
37+
if (!event.movementX) {
38+
return ;
39+
}
40+
41+
cancelAnimationFrame($timerId);
42+
$timerId = requestAnimationFrame((): void =>
3243
{
3344
const element = event.target as HTMLInputElement;
3445
if (!element) {

0 commit comments

Comments
 (0)