实现函数节流和防抖封装。

函数节流和函数防抖

防抖: 首次点击会立即触发,重复触发点击不会触发,停止后会触发。(个人设计)
节流: 使连续执行的事件或函数,变为固定时间间隔执行

	/**
	 * 节制函数
	 * @param {Function} method 需要节制的函数
	 * @param {Number} delay  间隔时间
	 * @param {Number} duration 超出时间
	 * @param {Boolean} controlType 1防抖 0节流 默认0
	 * @return Function 
	 */
	function control(method, delay, duration, controlType) {
	    let timer = null;
	    let flag = false;
	    let start = new Date().getTime();
	    return function () {
	        let context = this;
	        let args = arguments;
	        if (controlType) {
	            if (!flag) {
	                method.apply(context, args);
	                flag = true;
	                start = new Date().getTime();
	            }
	            if (timer) clearTimeout(timer)
	            timer = setTimeout(function () {
	                flag = false;
	                let end = new Date().getTime();
	                if (end - start >= duration) {
	                    method.apply(context, args);
	                    start = end;
	                }
	            }, delay)
	        } else {
	            let end = new Date().getTime();
	            if (timer) clearTimeout(timer)
	            if (end - start >= duration) {
	                method.apply(context, args);
	                start = end;
	            } else {
	                timer = setTimeout(function () {
	                    method.apply(context, args);
	                    start = new Date().getTime();
	                }, delay)
	            }
	        }
	    }
	}
  

你可能感兴趣的:(javascript)