标签:适用于 return 情况 方案 win func log 问题 deb
1. 函数节流:
// 函数节流 function throttle(method, context) { clearTimeout(method.tid); // mthod是真实要执行的函数,context是执行的作用域(默认window) method.tid = setTimeout(function() { method.call(context) // 确保方法在适当的环境中执行 }, 100); } // onscroll时函数节流 function scrollFun() { var marginBot = 0; if (document.documentElement) { marginBot = document.documentElement.scrollHeight - (document.documentElement.scrollTop+document.body.scrollTop) - document.documentElement.clientHeight; } else { marginBot = document.body.scrollHeight - document.body.scrollTop - document.body.clientHeight; } if(marginBot <= 0) { // 滚动到底部加载数据操作 } } window.onscroll = function() { throttle(scrollFun); }
2. 函数防抖
如果我们不希望每次都是要事件结束后等待延迟时间后执行回调;
function debounce(method, delay, duration){ var timer = null, stime = new Date(); // 记录下开始执行函数的时间 return function() { var context = this, args = arguments, ctime = new Date(); // 记录下当前时间 clearTimeout(timer); // 函数节流里的思路 // 记录下的两个时间相减再与duration进行比较 if (ctime - stime >= duration) { method.apply(context, args); stime = ctime; } else { timer = setTimeout(function(){ method.apply(context, args); }, delay); } } } window.onresize = debounce(method, 50, 100); // 50ms的间隔内连续触发的调用,后一个调用会把前一个调用的等待处理掉,但每隔100ms至少执行一次
3. 滚动实例区分下:
normal:滚动会立即触发事件执行;
throttle: 延迟100ms直到100ms以内没有事件触发之后执行,这样如果一直在操作,有可能一直不会触发事件发生;
debounce:50ms的间隔内连续触发的调用,后一个调用会把前一个调用的等待处理掉,但每隔100ms至少执行一次。
标签:适用于 return 情况 方案 win func log 问题 deb
原文地址:http://www.cnblogs.com/colima/p/7163057.html