79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
|
// 使用方法debounced,throttle
|
|||
|
// leeBtnClick: throttle(function () {
|
|||
|
// console.log(this)
|
|||
|
// console.log("执行需要触发事件得函数方法")
|
|||
|
// }, 3000),
|
|||
|
|
|||
|
/**
|
|||
|
* 防抖函数
|
|||
|
* 1、N秒内的多次触发仅执行最后一次
|
|||
|
* 2、在不断的触发事件时以最后一次触发为*标准*准进行调用执行
|
|||
|
* 3、判断连续触发事件的标准为(N秒内触发则重新计算时间直至取最后一次)
|
|||
|
* @param fn 需要防抖处理的回调函数
|
|||
|
* @param delay 防抖处理的延迟标准时间
|
|||
|
* @param immediate 是否默认 立即执行(去除延迟时间影响)
|
|||
|
*/
|
|||
|
function debounced(fn, delay = 1000, immediate = false) {
|
|||
|
let timer = null
|
|||
|
return function () {
|
|||
|
if (immediate) {
|
|||
|
console.log("立即执行参数 执行一次方法")
|
|||
|
fn.apply(this, arguments)
|
|||
|
immediate = false
|
|||
|
return
|
|||
|
}
|
|||
|
if (timer) {
|
|||
|
console.log("当前正在重复点击,准备重置时间,重新计算后等待N秒触发最后一次事件执行")
|
|||
|
clearTimeout(timer)
|
|||
|
}
|
|||
|
timer = setTimeout(() => {
|
|||
|
console.log("进入类启用定时器防抖执行了一次方法咯!!!")
|
|||
|
clearTimeout(timer)
|
|||
|
fn.apply(this, arguments)
|
|||
|
}, delay)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 节流函数
|
|||
|
* N秒内仅执行第一次
|
|||
|
* @param fn 需要节流处理的回调函数
|
|||
|
* @param delay 节流处理的延迟标准时间
|
|||
|
* @param immediate 是否默认 立即执行(去除延迟时间影响)
|
|||
|
*/
|
|||
|
function throttle(fn, delay = 1000, immediate = false) {
|
|||
|
console.log("进入节流对象")
|
|||
|
let timer
|
|||
|
let status = false // 是否为重复点击状态
|
|||
|
return function () {
|
|||
|
let _this = this
|
|||
|
let args = arguments
|
|||
|
|
|||
|
if (immediate) {
|
|||
|
console.log("立即执行参数 执行一次方法")
|
|||
|
fn.apply(_this, args)
|
|||
|
immediate = false
|
|||
|
return
|
|||
|
}
|
|||
|
if (status) {
|
|||
|
console.log("当前点击状态为正在重复点击,请稍等片刻后在点击执行")
|
|||
|
uni.showToast({
|
|||
|
title:'稍后在试。',
|
|||
|
icon:'none'
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
console.log("执行节流:当前执行了一次点击方法")
|
|||
|
fn.apply(_this, args)
|
|||
|
status = true // 修改状态
|
|||
|
timer = setTimeout(() => {
|
|||
|
console.log("规定时间到,重置状态,可以重新调用")
|
|||
|
status = false
|
|||
|
}, delay)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export {
|
|||
|
debounced,
|
|||
|
throttle
|
|||
|
}
|