| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /**
- * 函数节流模块封装
- *
- * @author lautin
- * @created 2019-11-20 18:46:01
- */
- /**
- * 节流方法,在指定时间内只执行一次,使用时间戳控制时间
- * @param {function} func 事件回调函数
- * @param {number} wait 限定输出的时间,建议100-300ms
- */
- function throttleA(func, wait) {
- // 上次执行时间
- let previous = 0;
- return function () {
- // 本次执行时间
- let now = Date.now(),
- context = this,
- args = arguments;
- // 定时器以外执行
- if (now - previous > wait) {
- func.apply(context, args);
- // 更新上次时间
- previous = now;
- }
- }
- }
- /**
- * 节流方法,在指定时间内只执行一次,使用定时器控制时间
- * @param {function} func 事件回调函数
- * @param {number} wait 限定输出的时间,建议100-300ms
- */
- function throttleB(func, wait) {
- // 记录上个定时器
- let timer;
- return function () {
- const context = this,
- args = arguments;
- // 如果没有定时器则执行
- if (!timer) {
- func.apply(context, args);
- // 更新定时器
- timer = setTimeout(() => {
- timer = null;
- }, wait);
- }
- }
- }
- /**
- * 兼容执行
- * @param {function} func 事件处理函数
- * @param {number} wait 节流时间
- * @param {mixed} flag 标识符 选择类型
- */
- export default function throttle(func, wait, flag = null) {
- return flag ? throttleB(func, wait) : throttleA(func, wait);
- }
|