Drcus | 王亚振

Drcus | 王亚振

随便写,记录点东西

开发常用函数

发布于:  

工具函数

setTimeout实现setInterval

直接用 setInterval 有一些弊端, 比如函数内做了一个异步操作 耗时时间较长, 超过了定时器的时间

// 不用维护 time
function customSetTimeout(cb) {
 return (time) => {
  setTimeout(() => {
    cb(() => {
      customSetTimeout(cb)(time);
    });
  }, time);
 }
}

// 例子
const test = (cb) => {
 const d = new Date();
 console.log(`${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`);
 setTimeout(cb, 1000);
}

防止高频调用的debounce函数

function debounce(fn, time, immediate) {
	var timeout;
	return function() {
		var context = this, args = arguments;
		var layer = function() {
			timeout = null;
			fn.apply(context, args)
		};

		var callNow = immediate && !timeout;
		clearTimeout(timeout);
		timeout = setTimeout(layer, time);
		callNow && layer()
 	}	
}

// 用法
var handleScroll = debounce(function(event) {
	console.log('scrolling');
}, 100);

window.addEventListener('scroll', handleScroll)

只执行一次的once 函数

function once(fn, context) { 
	var result;

	return function() { 
		if(fn) {
			result = fn.apply(context || this, arguments);
			fn = null;
		}

		return result;
	};
}
// 用法

var onlyFireOnce = once(function(){
	console.log('say hi')
});
onlyFireOnce();
onlyFireOnce(); // nada

获取一个链接的绝对地址

var getAbsoluteUrl = (function() {
	var a;

	return function(url) {
		if(!a) a = document.createElement('a');
		a.href = url;

		return a.href;
	};
})();

这种方法比较可靠

判断是否包含汉字

function includeChineseChar(value) {
  for (var i = 0; i < value.length; i++) {
    if (value.charCodeAt(i) > 0x4E00 && value.charCodeAt(i) < 0x9FA5) {
      // console.log('输入的含有中文');
      return true;
    }
  }
  return false;
}

Keep update ! :)

厚颜一下 ~^_^~

赏赐