HarmonyOS 鸿蒙Next 防抖,需求是想连续点击按钮只触发一次
HarmonyOS 鸿蒙Next 防抖,需求是想连续点击按钮只触发一次
// 防抖 在一段时间内函数被多次触发,防抖让函数在一段时间后最终只执行一次
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);
}
};
}
使用:
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%’)
}
}
更多关于HarmonyOS 鸿蒙Next 防抖,需求是想连续点击按钮只触发一次的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
function debounce() {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.timeout= setTimeout(() => {
// 代码逻辑
},600)
}
在HarmonyOS鸿蒙Next系统中,若要实现按钮防抖功能,即连续点击按钮只触发一次事件,可以通过以下方式实现:
-
状态标记法: 定义一个布尔变量用于标记按钮是否已被点击且在处理中。在按钮点击事件的处理函数中,首先检查该标记,若已被标记为处理中,则忽略此次点击;若未被标记,则执行相应操作并将标记置为处理中,操作完成后设置一个延时(如500毫秒),延时结束后重置标记为未处理状态。
-
计时器法: 使用计时器记录上一次点击事件的时间戳。在按钮点击事件中,获取当前时间戳并与上一次的时间戳比较,若时间差小于设定的防抖时间(如500毫秒),则忽略此次点击;若时间差大于防抖时间,则执行相应操作并更新上一次点击的时间戳。
示例代码(伪代码,需根据具体API实现):
bool isButtonClicked = false;
void onButtonClick() {
if (isButtonClicked) return;
isButtonClicked = true;
// 执行操作
PostDelayedTask(500, []() {
isButtonClicked = false;
});
}
注意:上述方法中的PostDelayedTask
为示例函数,实际使用时需根据鸿蒙系统提供的延时任务API进行替换。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html