HarmonyOS 鸿蒙Next ArkUI 点击节流以及防抖实现

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkUI 点击节流以及防抖实现

// 防抖 在一段时间内函数被多次触发,防抖让函数在一段时间后最终只执行一次
export function debounce(func: (event: ClickEvent) => void, delay?: number) {
let timer: number;
return (event: ClickEvent) => {
clearTimeout(timer);
timer = setTimeout(() => {
func(event);
}, delay ? delay : 1000);
};
}

// 节流 在规定的时间内,只执行一次
export function throttle(func: (event: ClickEvent) => void, delay?: number) {
let inThrottle: boolean;
return (event: ClickEvent) => {
if (!inThrottle) {
func(event);
inThrottle = true;
setTimeout(() => inThrottle = false, delay ? delay : 1000);
}
};
}

WechatIMG3.jpg

import { debounce, throttle } from ‘…/click/ClickMoreEvent’

@Entry
@Component
struct TestPage {
build() {
Column() {
Button(‘防抖点击’)
.onClick(debounce((event) => {
console.log(‘防抖拦截==’ + event.displayX)
}, 5000))
.gesture(LongPressGesture().onActionEnd((event) => {
console.log(‘长按拦截==’ + JSON.stringify(event))
}))
Button(‘节流点击’)
.onClick(throttle((event) => {
console.log(‘节流拦截==’ + event.displayX)
}, 5000))
}.width(‘100%’).height(‘100%’)
}
}

就可以实现节流跟防抖了

4 回复
不关闭定时器会有影响吗

有的,建议关闭

节流的定时器方法没有关闭,

在HarmonyOS鸿蒙系统的ArkUI框架中,实现点击节流(Throttle)和防抖(Debounce)功能,可以有效避免用户快速连续点击导致的多次事件触发问题。以下是实现思路:

点击节流(Throttle): 节流的核心思想是限制在一定时间内的函数执行次数。可以通过设置一个定时器,在指定的时间间隔内只允许一次事件处理。当事件触发时,如果定时器已存在,则忽略本次触发,直到定时器结束后再重新计时。

防抖(Debounce): 防抖的核心思想是延迟执行,只有在最后一次事件触发后的一段时间内没有新的事件触发,才执行事件处理函数。可以通过设置一个延迟执行的定时器,每次事件触发时重置定时器,直到定时器到期才执行事件处理。

在ArkUI中,可以利用JavaScript的setTimeoutclearInterval等函数来实现这两种功能。通过封装节流和防抖函数,可以在组件的点击事件中调用这些函数,从而实现对点击事件的节流和防抖处理。

具体实现代码会根据具体的业务逻辑和需求有所差异,但核心思想如上所述。开发者可以根据实际场景进行调整和优化。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部