欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

function 工具集

程序员文章站 2022-06-12 10:12:36
...
function 工具集


经常会碰到这样的问题
1. button.click 后,只调用一次方法
2. window.scroll触发太频繁,导致滚动加载次数太多
3. document.keyup次数太多,导致智能提示调用次数太多


你需要以下的方法来解决此类问题



$('a.load').on('click', $.once(function() {
$('#tabs .first').load(url);
}));

$(window).on('scroll', $.throttle(function() {
$('#rest').lazyload();
}));

$(input).on('keyup', $.debounce(function() {
$.suggest($(this).val())
}));




工具集源码如下:


$.bind = function(func, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
return func.apply(context, args);
}
}

//只调用一次
$.once = function(func){
var ran = false;
return function() {
if(ran) return;
ran = true;
func();
}
}

//ms时间内只执行一次
$.throttle = function(func, ms) {
ms = ms || 150;

var last = +new Date();
var timer ;
return function() {
var now = +new Date();
if(now - last > ms) {
timer = null;
last = now;
func();
} else {
timer = setTimeout(func, ms - (now-last));
}
}
}

//缓冲ms时间后才执行
$.debounce = function(func, ms) {
ms = ms || 150;

var timer;
return function() {
clearTimeout(timer);
timer = setTimeout(func, ms);
}
}




[list]
[*] underscore, yui 中有throttle, debounce两个方法, jquery中没有发现
[/list]
相关标签: function