diff --git a/ArkUI/entry/src/main/ets/pages/CustomRateLimiting.ets b/ArkUI/entry/src/main/ets/pages/CustomRateLimiting.ets index 2936fde6375e3d20e6fd80c5d78314ea545891cd..58ad29c31134a06a3ff65312c769df859743603b 100644 --- a/ArkUI/entry/src/main/ets/pages/CustomRateLimiting.ets +++ b/ArkUI/entry/src/main/ets/pages/CustomRateLimiting.ets @@ -19,32 +19,47 @@ // [Start gesture_modifier] class MyGesture implements GestureModifier { - interval: number = 500; - func: ((event: GestureEvent) => void) | null = null; + interval: number = 2000; + private inThrottle: boolean = false; + private lastGestureType: string = ''; - throttle(func: (event: GestureEvent) => void, delay?: number) { - let inThrottle: boolean = false; - return (event: GestureEvent) => { - if (!inThrottle) { - func(event); - inThrottle = true; - setTimeout(() => { - inThrottle = false; - }, delay ? delay : 1000); - } - }; + // Unified rate limiting processing + private throttleWrapper(eventType: string, callback: () => void) { + if (!this.inThrottle) { + this.inThrottle = true; + this.lastGestureType = eventType; + callback(); + + setTimeout(() => { + this.inThrottle = false; + this.lastGestureType = ''; + }, this.interval); + } } applyGesture(event: UIGestureEvent): void { - const throttledFunc = this.throttle((gestureEvent: GestureEvent) => { - if (this.func) { - this.func(gestureEvent); - } - }, this.interval); + // Create a unified gesture processing function + const handleTap = (gestureEvent: GestureEvent) => { + this.throttleWrapper('tap', () => { + console.info('---onTap---'); + }); + }; + const handleLongPress = (gestureEvent: GestureEvent) => { + this.throttleWrapper('longPress', () => { + console.info('---onLongPress---'); + }); + }; + + // Add two gesture recognizers event.addGesture( new TapGestureHandler({ count: 1, fingers: 1 }) - .onAction(throttledFunc) + .onAction(handleTap) + ); + + event.addGesture( + new LongPressGestureHandler({ fingers: 1, duration: 600 }) + .onAction(handleLongPress) ); } } @@ -55,13 +70,6 @@ struct Index { @State message: string = 'Hello World'; @State modifier: MyGesture = new MyGesture(); - onPageShow(): void { - // Note: func now accepts a (event: GestureEvent) => void - this.modifier.func = (event: GestureEvent) => { - console.info('---onTap---'); - }; - } - build() { RelativeContainer() { Button(this.message) @@ -78,4 +86,5 @@ struct Index { .width('100%') } } + // [End gesture_modifier] \ No newline at end of file