79 lines
2.0 KiB
Kotlin
79 lines
2.0 KiB
Kotlin
|
|
package com.aiosman.ravenow.utils
|
|||
|
|
|
|||
|
|
import kotlinx.coroutines.CoroutineScope
|
|||
|
|
import kotlinx.coroutines.delay
|
|||
|
|
import kotlinx.coroutines.launch
|
|||
|
|
import java.util.concurrent.atomic.AtomicBoolean
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 防抖工具类
|
|||
|
|
* 用于防止用户快速重复点击
|
|||
|
|
*/
|
|||
|
|
object DebounceUtils {
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 防抖点击处理
|
|||
|
|
* @param scope 协程作用域
|
|||
|
|
* @param delayMillis 防抖延迟时间(毫秒),默认500ms
|
|||
|
|
* @param action 要执行的操作
|
|||
|
|
*/
|
|||
|
|
fun debounceClick(
|
|||
|
|
scope: CoroutineScope,
|
|||
|
|
delayMillis: Long = 500L,
|
|||
|
|
action: () -> Unit
|
|||
|
|
) {
|
|||
|
|
scope.launch {
|
|||
|
|
delay(delayMillis)
|
|||
|
|
action()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 带状态检查的防抖点击处理
|
|||
|
|
* @param scope 协程作用域
|
|||
|
|
* @param delayMillis 防抖延迟时间(毫秒),默认500ms
|
|||
|
|
* @param isProcessing 是否正在处理中的状态
|
|||
|
|
* @param action 要执行的操作
|
|||
|
|
*/
|
|||
|
|
fun debounceClickWithState(
|
|||
|
|
scope: CoroutineScope,
|
|||
|
|
delayMillis: Long = 500L,
|
|||
|
|
isProcessing: AtomicBoolean,
|
|||
|
|
action: () -> Unit
|
|||
|
|
) {
|
|||
|
|
if (isProcessing.get()) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
isProcessing.set(true)
|
|||
|
|
scope.launch {
|
|||
|
|
delay(delayMillis)
|
|||
|
|
try {
|
|||
|
|
action()
|
|||
|
|
} finally {
|
|||
|
|
isProcessing.set(false)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 简单的防抖点击处理(无协程)
|
|||
|
|
* @param lastClickTime 上次点击时间
|
|||
|
|
* @param delayMillis 防抖延迟时间(毫秒),默认500ms
|
|||
|
|
* @param action 要执行的操作
|
|||
|
|
* @return 是否执行了操作
|
|||
|
|
*/
|
|||
|
|
fun simpleDebounceClick(
|
|||
|
|
lastClickTime: Long,
|
|||
|
|
delayMillis: Long = 500L,
|
|||
|
|
action: () -> Unit
|
|||
|
|
): Boolean {
|
|||
|
|
val currentTime = System.currentTimeMillis()
|
|||
|
|
if (currentTime - lastClickTime < delayMillis) {
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
action()
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
}
|